一图打尽C++内存分区(分段)
直接上图:
- 栈区(Stack Segment):
- 位于内存的高地址部分。
- 用于存储函数调用时的局部变量、函数参数和返回地址。
- 内存地址从高向低增长。
- 堆区(Heap Segment):
- 位于栈区之下。
- 用于动态分配的内存(如通过
malloc
或new
分配的内存)。 - 内存地址从低向高增长。
- 全局/静态区(Global/Static Segment):
- 包括已初始化数据段(.data)和未初始化数据段(.bss)。
- 存储全局变量和静态变量。
- 常量区(Constant Segment):
- 存储只读常量数据(如字符串字面量)。
- 通常与代码段合并在一起。
- 代码段(Text Segment):
- 位于内存的低地址部分。
- 存储程序的可执行代码和只读常量。
注意:
- 常量区和代码段部分时候会一概而论,两者都存储只读数据。
- 虚函数表存放在常量区,代码段,虚函数表是编译阶段生成的。
- 未初始化的全局变量和静态变量:
- 存储在**未初始化数据段(.bss)**中
- 这些变量在程序启动时被初始化为零
- 已初始化的全局变量和静态变量:
- 存储在**已初始化数据段(.data)中
量: - 存储在**已初始化数据段(.data)**中
- 这些变量在程序启动时被初始化为指定的值
- 存储在**已初始化数据段(.data)中