内存模型
C++在执行程序的时候,将内存方向划分为4个区域:
-
代码区:存放二进制代码,由操作系统进行管理
-
全局区:存放全局变量、静态变量、常量,程序结束后由操作系统释放
-
栈区:存放函数参数、局部变量,由编译器自动分配和释放
-
堆区:由开发者申请分配和释放,若程序员不释放,程序结束由操作系统自动回收
意义:对于不同区域存放的数据,赋予不同的生命周期,给编程更大的灵活性。
代码区
存放CPU执行的二进制代码(机器指令)
特点:
-
共享:对于频繁被执行的程序,只需要在内存中有一份就够了
-
只读:防止被意外修改
全局区
-
存放全局变量和静态变量,还存放常量,包括字符串常量和其他常量
-
数据在程序结束后由操作系统进行释放
栈区
-
存放函数参数、局部变量
-
不要返回局部变量的地址,因为函数一执行完,栈区数据就被释放了,虽然编译器会做短暂的保留