内存四区与new操作符
(1)代码段:
.text
主要存放代码(用户代码)包括main函数以及其他用户自定义的函数
只读并且共享,这段内存在程序的运行期间是不会被释放
.init
主要是存放系统给每一个可执行文件自动添加的“初始化代码”
(例如:命令行的参数、环境变量的准备 ... )
(2)数据段
.data
主要存放程序 已经初始化的全局变量 和 已经初始化的static静态变量
可读可写,这段内存在程序的运行期间是不会被释放
.bss
主要存放 未初始化的全局变量 和 未初始化的static静态变量
可读可写,这段内存在程序的运行期间是不会被释放
.bss段 在进程初始化的时候(可能)被初始化为0 (编译器的优化)
.rodata
read only 只读数据段
主要存放程序中的只读数据(例如:字符串常量)
只读,这段内存在程序的运行期间是不会被释放
(3)栈空间 Stack
主要是存放局部变量(非static修饰的)
可读可写,这段空间会自动释放
(代码块执行完毕,代码块中的所有局部变量的空间都会自动释放)
随代码块的持续性
(4)堆空间 heap
动态内存空间
C语言中: 主要是 malloc / realloc / calloc 动态分配的空间
可读可写,这段内存在程序的运行期间,一旦分配成功 就一直存在,
直到手动释放free() 或者 进程消亡
C++中:new创建
delete释放
代码如下