之前一直在纠结进程的虚拟地址空间跟C++的内存管理分区在细节上的不同,今天系统化的过了一遍,大概记录一下笔记。
-
首先明确C++的内存分为: 栈、堆、全局/静态区、常量区(.rodata)、代码区(.text)
-
堆、栈是动态内存分配。 全局区、常量区 在编译后就确定了大小,程序运行期间不能更改。
-
在程序加载到到内存之前,没有栈区、堆区
-
全局区包括:.data和.bss, 存放的是全局变量和静态变量,初始化的放在.data;未初始化的放在.bss,.bss只有一个占位符记录所需空间大小,并不占实际空间,初始化为0或者NULL之后是在.data段
-
常量区:放只读数据,比如虚函数表,不可改。 字符串常量
-
代码区:放机器指令