C/C++的内存各个区域的划分

1.大体有哪些区域?

栈区:局部变量,函数的参数

堆区:动态分配的内存

代码区:被编译后的程序代码

静态区:静态变量,全局变量

常量区:数字常量,字符串常量

2.如何区分变量是那个区域?

存放在哪里,看它定义的时候是局部变量还是全局变量,有没有static关键字,有没有malloc函数在堆区空间开辟空间,是不是常量。

其他的不要管。

3.你以为你看完上面的就掌握了吗?不,请你看看下面的代码和题目,再来说你掌握了。

int globalvar = 1;
int staticGlobalVar = 1;
int main()
{
	static int staticVar = 1;
	int localVar = 1;
	
	int num1[10] = { 1,2,3,4 };
	char char2[] = "abcd";
	const char* pChar3 = "abcd";
	int* ptr1 = (int*)malloc(sizeof(int) * 4);
	int* ptr2 = (int*)calloc(4, sizeof(int));
	int* ptr3 = (int*)realloc(ptr2, sizeof(int));
	free(ptr1);
	free(ptr2);
	free(ptr3);
	return 0;
}

(1)选择题:

下面的变量在内存的哪个区域?

选项:A、栈区        B、堆区     C、静态区      D、常量区

①   globalvar___       staticGloalVar___     staticVar___         

②   localVar___     num1___

③   char2___       *char2___                           

④   pChar3___       *pChar3___

⑤   ptr1___          *ptr1___       

(2)答案:①  C   C   C   

           ②  A    A

           ③  A    A 

           ④  A    D

           ⑤  A    B

(3)解析:

①静态变量和全局变量 存放在 静态区

②局部变量 存放在 栈区。num1也是一个局部的变量

③char2是一个局部变量

  *char2解引用表示它指向的那一块数组的首元素,而数组的首元素存储在栈区中,这里你们一定有疑惑,为什么字符串存储在栈区。其实不然,这里表示的char类型的数组会在栈区开辟5个字节的空间,然后把在常量区的字符串“abcd\0”拷贝到数组中。

所以*char指向的数组是在栈区。

④pChar3也是一个局部变量,在栈区。

  *pChar3指向的是常量区的字符串“abcd\0”,所以*pChar3表示字符串的首元素a,a是存放在常量    区的。

⑤ptr1也是一个局部变量,存放在栈区。它指向的是一块堆区的内存块。

  *ptr1,是对ptr1指针解引用,就是堆区的那一块空间。

这么说你们肯定还是发蒙,那我画个图来带你们理解!、

                   

相关推荐

  1. 谈谈JVM内存区域

    2024-04-09 05:12:05       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-09 05:12:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-09 05:12:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-09 05:12:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-09 05:12:05       18 阅读

热门阅读

  1. 解决报错OSError: cannot write mode RGBA as JPEG

    2024-04-09 05:12:05       12 阅读
  2. 简述对css工程化的理解

    2024-04-09 05:12:05       14 阅读
  3. hash模式和history模式的区别

    2024-04-09 05:12:05       17 阅读
  4. 关于SpringBoot的配置文件

    2024-04-09 05:12:05       12 阅读
  5. MySQL-commit,rollback

    2024-04-09 05:12:05       13 阅读
  6. 探索 C++ 中的 string 类

    2024-04-09 05:12:05       10 阅读
  7. Inotify

    Inotify

    2024-04-09 05:12:05      11 阅读
  8. PCL 三角形到三角形的距离

    2024-04-09 05:12:05       11 阅读