C++ 语言 把内存分为5大区域:
-
栈(Stack) 内存区:
-
栈主要存储 局部变量 和 函数参数。
-
该存储区由 编译器 自动分配和释放。
-
栈 内存区域的 进栈 和 出栈 有相应的 计算机指令 支持。
-
有专门的 寄存器 存储栈的地址,效率高。
-
栈内存区域的内存空间是连续的。
-
但栈也有局限,就是内存空间有限。
-
栈 也是计算机系统的数据结构之一。
-
-
堆(Heap) 内存区:
-
程序员使用 new 关键字手动创建和使用 delete 关键字手动释放,属于动态分配。
-
堆的内存空间不连续,会产生碎片。
-
堆的内存空间趋近于无限,主要受物理内存条本身大小限制。
-
操作系统有一个记录未分配的内存空间的链表,当收到内存申请(
new
关键字)时会遍历链表,找到第一个空间大于申请空间的堆节点,将该节点分配给程序并将该节点从链表中删除。 -
当分配内存空间时,一般会在该内存空间的首地址处记录本次分配的内存大小。
-
-
全局/静态区:
-
存储 全局变量 和 静态变量。
-
该区域的变量会在程序结束后自动释放。
-
该区域又分为 DATA(全局初始化区) 和 BBS(全局未出初始化) 两段。
-
已经初始化的全局变量和静态变量存放在 DATA 段。
-
未出实话的全局变量和静态变量存放在 BBS 段。
-
BBS 段会在程序执行前自动清零。因为这个特性,所以未初始化的全局变量和静态变量会自动初始化为
0
(不是数字0,而是对应的数据类型的空值)。
-
-
-
文字常量区:
-
存放常量,且不能修改。
-
程序结束后自动释放。
-
-
程序代码区:
- 存放程序的二进制代码。
习题
const
关键字的变量存储在哪个区域 ?
目前尚无回复