8 C/C++之内存分区

一个程序要运行,就必须先将可执行的程序加载到计算机内存里,程序加载完毕后,就可以形成一个运行空间,并如图所示的那样进行布局。

                                                       

代码区存放的是程序的执行代码;数据区存放的是全局数据、常量、静态变量等;堆区存放的则是动态内存,供程序随机申请使用;而栈区则存放着程序中所用到的局部数据。其中,除了代码区不是我们能在代码中直接控制的,剩余三块都是我们编码过程中可以利用的。在C++中,数据区又被分成自由存储区、全局/静态存储区和常量存储区,再加上堆区、栈区

  • 栈区

在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元将自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是所分配的内存容量有限。

  • 堆区

堆就是那些由new分配的内存块,其释放编译器不会管它,而是由我们的应用程序控制它,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统就会自动回收。

  • 自由存储区

自由存储区是那些由malloc等分配的内存块。它和堆十分相似,不过它是用free来释放内存的。

  • 全局/静态存储区

全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有作此区分,它们共同占用同一块内存区。

  • 常量存储区

这是一块比较特殊的存储区,里面存放的是常量,不允许修改。

-------C/C++知识持续发布中,如果能学到一点点知识,请收藏关注,共同学习进步--------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值