说到 C++ 的内存管理,我们可能会想到栈空间的本地变量、堆上通过 new 动态分配的变量以及全局命名空间的变量等,这些变量的分配位置都是由系统来控制管理的,而调用者只需要考虑变量的生命周期相关内容即可,而无需关心变量的具体布局。这对于普通软件的开发已经足够,但对于引擎开发而言,我们必须对内存有着更为精细的管理。
在文章的开篇,先对一些基础概念进行简单的介绍,以便能够更好地理解后续的内容。
如图,描述了C++程序的内存分布。
Code Segment(代码区)
也称Text Segment,存放可执行程序的机器码。
Data Segment (数据区)
存放已初始化的全局和静态变量, 常量数据(如字符串常量)。
BSS(Block started by symbol)
存放未初始化的全局和静态变量。(默认设为0)
Heap(堆)
从低地址向高地址增长。容量大于栈,程序中动态分配的内存在此区域。<