C++基础——内存模型
内存分区模型
代码区:存放函数体的二进制代码,由操作系统进行管理;
全局区:存放全局变量和静态变量以及常量;
栈区:由编译器自动分配释放,存放函数的参数值、局部变量等;
堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。
程序运行前的区域:
代码区:
存放CPU执行的机器指令,代码区是共享的,只有一份代码,是只读的。
全局区:
存放全局变量(定义在函数{}外的变量)、静态变量(static修饰的变量)、部分常量(字符串常量和const修饰的全局常量)。
注意:#define宏定义是不放内存的,定义的变量只是替换关系。
程序运行后的区域:
栈区:
存放函数的参数值、局部变量等
注意:不要返回局部变量的地址,因为函数运行完操作系统虽然会保留,但其实栈区内存已经被释放了。但是const修饰的引用可以返回并作为左值使用
堆区:
在C++中主要利用new在堆区开辟内存,由程序员分配释放,若程序员不释放,整个程序结束时由操作系统释放。
利用new创建的数据,会返回该数据对应类型的指针。
开辟的数据由程序员手动释放,利用delete操作符。
eg:
int * func() {
int * p = new int(10);
return p;
}
释放:delete p;
指针p也属于局部变量,存放在栈区,但是p里存的是地址,这个地址指向堆区,堆区的内存里值为10。

浙公网安备 33010602011771号