程序的内存模型:
- 代码区:存放二进制代码
- 全局区:全局变量,静态变量,常量
- 栈区:由编译器自动分配释放,函数的参数值,局部变量
- 堆区:由程序员分配和释放,若程序员不释放,程序结束时有操作系统回收
1.1程序运行之前
在程序编译后,生成exe可执行程序,未执行该程序之前分为两个区域(代码区和全局区)
1.1.1代码区:
- 存放CPU执行的机器指令
- 共享的
- 只读的
1.1.2全局区:
- 全局变量和静态变量(static)
- 常量区(字符串常量,const+全局变量=全局常量)(该区域的数据再程序结束之后又操作系统释放)
1.2程序运行之后
1.2.1栈区
由编码器自动分配释放,存放函数的参数值,局部变量等
注:不要反回局部变量的地址,栈区开辟的数据有编译器自动释放
(栈区变量的地址编译器只会作一次保留,之后使用便是乱码)
1.2.2堆区
有程序员分配与释放,若程序员不释放,程序结束后由操作系统回收。
在c++中主要利用new来在堆区中开辟内存
例:int *p=new int(10); return p;