一个程序要运行,就必须先将可执行的程序加载到计算机内存里,程序加载完毕后,就可以形成一个运行空间,并如图所示的那样进行布局。
代码区存放的是程序的执行代码;数据区存放的是全局数据、常量、静态变量等;堆区存放的则是动态内存,供程序随机申请使用;而栈区则存放着程序中所用到的局部数据。其中,除了代码区不是我们能在代码中直接控制的,剩余三块都是我们编码过程中可以利用的。在C++中,数据区又被分成自由存储区、全局/静态存储区和常量存储区,再加上堆区、栈区。
- 栈区
在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元将自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是所分配的内存容量有限。
- 堆区
堆就是那些由new分配的内存块,其释放编译器不会管它,而是由我们的应用程序控制它,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统就会自动回收。
- 自由存储区
自由存储区是那些由malloc等分配的内存块。它和堆十分相似,不过它是用free来释放内存的。
- 全局/静态存储区
全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有作此区分,它们共同占用同一块内存区。
- 常量存储区
这是一块比较特殊的存储区,里面存放的是常量,不允许修改。
-------C/C++知识持续发布中,如果能学到一点点知识,请收藏关注,共同学习进步--------------------