总结一下内存模型,欢迎批评指正。
往上高地址,往下低地址。
五大区名称 | 我自己细分的名称 | 存储内容 | 由谁执行内存分配释放 |
---|---|---|---|
Part 1 栈区 | 不包括静态参数的函数参数值,局部变量 (实现函数调用、临时数据寄存与交换) | 编译器分配释放 | |
Part 2堆区 | 动态内存。new/malloc堆扩张;delete/free堆缩减 | 程序员分配释放 | |
Part 3全局/静态区 | BSS段 | 未初始化的全局变量 +未初始化的静态变量 | 程序结束后系统释放 |
DATA段 | 初始化的全局变量 +初始化的静态变量 | 程序结束后系统释放 | |
Part 4常量存储区 | 其他常量(?存疑) | 存只读常量 | 程序结束后系统释放 |
文字常量区 | 存只读的常量变量,如字符串常量等 | 程序结束后系统释放 | |
Part 5 程序代码区 | 存函数体的二进制代码 | 程序结束后系统释放 |