C++程序在运行时会将内存划分为4个区域:
1·代码区:存放函数体的二进制代码,由操作系统进行管理
2·全局区:存放程序的全局变量、静态变量、常量
3·栈区:由编译器进行自动分配和释放,存放函数的参数值,局部变量等
4·堆区:由程序员进行分配和释放,若未释放则在程序结束时由操作系统回收
不同内存区域存放不同的数据,具有不同的生命周期。
程序在运行之前就提前划分的两个区域:
代码区:
存放CPU的相关机器指令集,也就是程序代码对应的二进制代码。
代码区域具备的特性
共享性:对于频繁指向的程序,内存中只存在一份代码
只读性:代码在装载进内存后不允许修改
全局区:
存放全局变量/静态变量。
该区域数据在程序运行结束后由操作系统释放。
程序在运行后划分的区域:
栈区:
由编译器自动分配和释放,存储函数的参数和局部变量
由于是编译器自动分配释放地址,所以不能在函数中返回函数内局部变量的地址。(在返回局部变量地址后,编译器会保留一次地址,在返回值第一次被使用后就会释放该地址)
堆区:
由程序员分类和释放内存。
使用关键字 new 来向堆区中开辟数据空间,程序运行结束后自动释放或者使用关键字delete来释放堆的数据。