0%
前言
C++内存分区模型学习笔记
内存分区模型
代码区
- 程序运行前划分的区域
- 存放函数体的二进制代码,由操作系统进行管理
- 代码区的特点
- 共享:多次执行相同的程序不会重复在代码区生成
- 只读:防止程序意外的修改它的指令
全局区
- 程序运行前划分的区域
- 程序结束后由操作系统释放
- 存放全局变量、静态变量、常量(字符串常量、const修饰的全局变量(全局常量))
栈区
- 程序运行后划分的区域
- 由编译器自动分配和释放
- 存放函数值、局部变量、函数的形参、const修饰的局部变量(局部常量)等
- 注意事项
- 返回值不要返回局部变量的地址,因为栈区的数据在函数执行完后自动释放
堆区
- 程序运行后划分的区域
- 由开发者分配和释放(若开发者不释放,程序结束时由操作系统回收)
- 通过
new
关键字开辟堆区数据,通过delete
关键字释放堆区数据
全局变量和局部变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include<iostream>
int global_a = 10;
const int const_global_a = 10;
int main() { int a = 10; static int static_a = 10; const int const_a = 10; }
|
堆区数据的管理
手动开辟堆区数据
- 通过
new
关键字,开辟堆区数据
- 返回堆区数据的地址
1
| 数据类型 * 指针名 = new 数据类型(数据值);
|
开辟数组数据
1
| 数据类型 * 指针名 = new 数据类[数组长度];
|
手动释放堆区数据
释放数组数据
完成
参考文献
哔哩哔哩——黑马程序员