众所周知C++内存分为五个区域:栈、堆、全局/静态存储区、字符串常量区和代码区。
1. 栈:由系统进行内存的管理。主要存放函数的参数以及局部变量。在函数完成执行,系统自行释放栈区内存,不需要用户管理。
2. 堆:使用malloc或者new进行申请。堆内存需要用户申请和释放,若不手动释放(内存泄漏),程序结束后由系统回收。
3. 全局/静态存储区:存储全局变量和静态变量。静态存储区内的变量在程序编译阶段已经分配好内存空间并初始化。
此块内存在程序的整个运行期间都存在,它主要存放静态变量、全局变量和常量。
4. 字符串常量区:字符串常量的存储位置。
5. 代码区:存放程序体的二进制代码。函数编译后存在该区。
int a = 0; //静态全局变量区
char *p; //静态全局变量区,编译器默认初始化为NULL
void main()
{
int b; //栈
char s[] = "abc";//栈
char *p2 = "123456";//123456在字符串常量区,p2在栈上
static int c =0; //c在静态变量区,0为文字常量,在代码区
const int d=0; //栈
static const int d;//静态常量区
p = (char *)malloc(10);//分配得来得10字节在堆区。
strcpy(p, "123456"); //123456放在字符串常量区,编译器可能会将它与p2所指向的"123456"优化成一个地方
}
4万+

被折叠的 条评论
为什么被折叠?



