C++程序的内存布局

1.c++内存布局

对于一个C/C++程序员来说,搞清楚一个C/C++程序在计算机内存中的布局尤为重要。了解了程序在计算机内存中的布局,对程序员解决段错误,内存泄漏等问题也有一定的帮助,也能更加深刻的理解一个程序。
在一个32位的Linux操作系统上,计算机将会为每一个进程分配4GB的虚拟空间。其中高地址的1GB内存为内核空间,低地址的3GB空间为用户空间,如下:
C++程序的内存布局_第1张图片
代码中的所有内存分配操作都会在各个进程的用户空间进行。而3GB的进程用户态空间又会被分为好几个区域,用来分配不同类型数据的内存,具体的分布如下图:
C++程序的内存布局_第2张图片

2.各段内存区域介绍

1.栈区(stack):该区域存放的是局部变量,函数参数,函数返回值,函数返回地址等等。栈区的内存由操作系统维护,函数结束后该空间由操作系统释放。
2.堆区(heap):该区域的内存由程序员自行管理,程序员可以使用malloc,new等来申请堆上的内存,在使用完之后需要使用free或者delete来释放内存,如果未释放则会有内存泄漏问题。一般情况下,程序结束时也会由操作系统释放该内存。
3.全局区:该区域存放全局变量和静态变量。在程序结束后该内存区域由操作系统释放。
4.代码段:代码段分为只读存储区以及文本区。只读存储区存放的则是字符串常量,文本区则存放函数的二进制代码。
5.内存映射段:该区域存在静态库,动态库以及文件映射,例如mmap等。

3.总结

作为一名C/C++程序员搞清楚程序的内存布局是非常有必要的。万丈高楼平地起,只有夯实基础知识才能让自己有建造万丈高楼的本领。

你可能感兴趣的:(c++)