C进阶 - 内存四驱模型

作者: 你也不知道 | 来源:发表于2020-07-05 10:20 被阅读0次
一.内存四驱模型

不知我们是否有读过 《深入理解 java 虚拟机》这本书,强烈推荐读一下。在 java 中我们将运行时数据,分为五个区域分别是:程序计数器,java 虚拟机栈,本地方法栈,java 堆,方法区。

在 c/c++ 中我们将运行时数据,分为四个区域分别是:栈区,堆区,数据区,代码区。我们详细来介绍下:

  1. 栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
  2. 堆区:一般由程序员分配释放, 若程序员不释放,程序结束时可能由 OS 回收。
  3. 数据区:存放全局变量、静态变量和常量字符串等等。 程序结束后由系统释放。
  4. 存放函数体的二进制代码。
二.模型案例详解

有时会想就算知道了 c/c++ 的内存四驱模型,好像也没啥作用,这东西背一下就好了,其实不然。我们来看一个实例:

char* getStr(){
  char buff[128];

  strcpy(buff,"12345");

  return buff;
}

void main(){
  char* str = getStr();

  printf("%s",str);

  getchar();
}

请问上面这个会打印啥?接下来我们再来看个实例:

// 求数组的大小
int size(int arr[]){
  int size = sizeof(arr) / sizeof(int);
  return size;
}

void main(){
  int arr[] = {1,2,3,4,5,6};

  // 求数组的大小
  int size = sizeof(arr) / sizeof(int);

  printf("size = %d\n",size);

  size = size(arr);

  printf("size = %d\n",size);

  getchar();
}

请问上面两个 size 的值是多少?接下来我们再来看个实例:

char* getStr1(){
    char* str = "12345";
    return str;
}

char* getStr2(){
    char* str = "12345";
    return str;
}

void main(){

    char* str1 = getStr1();

    char* str2 = getStr2();

    printf("%d , %d",str1,str2);

    getchar();
}

请问上面 str1 和 str2 的地址值是否会一样?相信只要我们真正的理解了 c/c++ 的内存四驱模型,那么这些问题就迎刃而解了,当然这些还只是第一步,关键还在于对指针的理解。

视频地址:https://pan.baidu.com/s/1gMzvvfP8nFj9wJ6VZgSnkQ
视频密码:3ti3

相关文章

  • c进阶-内存四驱模型

    数组参数传递 代码如下 情况分析:我们会发现数组作为参数传递的时候获取不到长度,这是为什么呢?这是因为c/c++编...

  • C进阶 - 内存四驱模型

    一.内存四驱模型 不知我们是否有读过 《深入理解 java 虚拟机》这本书,强烈推荐读一下。在 java 中我们将...

  • C进阶 - 内存四驱模型

    一.内存四驱模型 不知我们是否有读过 《深入理解 java 虚拟机》这本书,强烈推荐读一下。在 java 中我们将...

  • C语言内存四驱模型

    一、数据类型的本质 1、数据类型可以理解为创建变量的模具,是固定内存大小的别名。 2、数据类型的作用:编译...

  • C基础-内存的四驱模型

    数据类型的本质 数据类型本质:一个固定大小连续的内存块。数据类型的作用:分配内存空间大小 变量的本质 变量的本质:...

  • iOS进阶——iOS(Objective-C)内存管理·二

    iOS进阶——iOS(Objective-C)内存管理·二

  • NDK学习之路之 c++ 知识归纳

    1.c++ 引用 其实就是四驱模型的拷贝,引用其实是地址赋值,可以看成同一块内存的另外一个变量以两个变量值交换为例...

  • 《深入理解Java虚拟机》(三)--Java内存模型与线程(1)

    Java内存模型 Java的内存模型屏蔽掉了各种硬件和操作系统的内存访问差异,实现了Java跨平台的效果,C/C+...

  • iOS面试:iOS内存分区

    OC语言是C语言的超集,所以先了解C语言的内存模型的内存管理会有很大的帮助。C语言的内存模型分为5个区:栈区、堆区...

  • C++11 Memory Model

    Herb Sutter在一次对C++11内存模型的演讲中提到C++11的内存模型,让C++有了标准独立于编译器和平...

网友评论

    本文标题:C进阶 - 内存四驱模型

    本文链接:https://www.haomeiwen.com/subject/ngomqktx.html