C++中的堆(Heap)和栈(Stack)1:Memory Layout

       要讲清楚C++中的堆(Heap)和栈(Stack),首先要清楚C++程序的内存结构(Memory Layout)。一个典型的在进程中运行的C++程序的内存结构,由以下五部分组成:

1,代码段(Text Segment):代码段中存放可执行代码(code),为了避免由于堆或栈溢出导致代码段被改写,代码段都放在堆和栈的下面,即低地址区。

2,已初始化数据段(Initialized data): 该内存区域放置已初始化的全局变量,或者申明为static的全局或局部变量,以及常量。

3,未初始化数据段(Uninitialized data,or bss): 该内存区域放置未初始化的全局变量,或者申明为static的全局或局部变量。

4,堆(Heap):该内存区域又称为自由空间(free store),用来存储动态分配(dynamically allocate)的变量,即在程序运行时,由new/malloc创建的对象。动态对象的生存期由程序来控制,即动态对象不再使用时,代码必须调用delete/free显式地销毁它们。C++的智能指针shared_ptr/unique_ptr,会自动的创建和销毁对象。

5,栈(Stack):该内存区域存放函数的局部变量,以及命令行参数和系统变量。

如下图所示:

C++  程序 Memory Layout

程序范例如下:

范例

下一节《C++中的堆(Heap)和栈(Stack)2:Overflow

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。