「C++ 内存管理」
内存布局
- 代码段:程序的所有指令会存放在这个区域,这是已经编译后的机器码。
- 字面量池:程序初始化时的一些字符串字面量,在程序中用于显示文字
- 全局数据段:程序初始化时的常量和全局/静态的变量。C/C++ 用
global/static
声明的变量都存放在这个区域,对所有函数公开可见。 - 堆:这里保存的数据只是为了临时存储一些值而创建的,而我们可能在程序运行过程中可能会回收此内存。因为我们在程序执行期间不需要很长时间,所以使用C中的
new
或malloc
这类内存分配程序来为我们所需的特定数据类型提供新的空间,并且随着我们要求越来越多的动态数据空间而该区域不断扩大,并且在内存中逐渐增长到更高的地址。 - 栈:存储着该程序 “上下文”,它将从内存的高层地址开始,然后向另一个方向向下扩展。上下文其实就是程序中各个函数之间调用的先后顺序。
程序栈帧
帧(frame
),在进程中每个函数被调用时分别从这个栈占用一段区域,就称为帧。