C++内存存储区域的划分
C++内存存储区域划分
面试笔试常考
内存中对数据的存储不是杂乱无章的,而是有相应的划分,根据数据类型分门别类安放到相应的位置。
存储的区域由最高存储地址到最低存储地址依次为:
- 命令行参数区:命令行参数和环境变量;
- 栈区(stack):指那些由编译器需要的时候分配,在不需要的时候自动清除的变量的存储区域。里面的变量通常是函数的参数值、局部变量等值,其操作方式类似于数据结构中的栈。
- 堆区(heap):动态分配内存。一般由程序员分配释放,若程序员不释放掉,在程序结束后,操作系统可能会自动回收。它与数据结构的堆是两码事,分配方式类似于链表。
- 数据段:
- 代码段:存放函数体的二进制代码
//main.cpp 程序代码区 int a = 0; //全局初始化区 char *p1; //全局未初始化区 main() { int b; //栈 char s[] = "abc"; //栈 char *p2; //栈 char *p3 = "123456"; //123456\0在常量区,p3在栈上。 static int c =0; //全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); //分配得来得10和20字节的区域就在堆区。 strcpy(p1, "123456"); //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。