C++内存四区的概念

内存四区

1.内存分区模型
C++在运行的过程中将内存大方向划分为四个区域
<1>代码区:存放代码的二进制代码,由操作系统进行管理
<2>全局区:存放全局变量和静态变量以及常量
<3>栈区:由编译器自动分配释放,存放函数的参数值,局部变量等
<4>堆区:由程序员分配和释放,若程序员不释放,当程序运行结束后系统将会自动释放
意义:不同区域存放的数据,赋予不同的生命周期,给我们最大的灵活编程
2.程序运行前和运行后
在程序编译后,生成exe可执行文件,我们通过DEVC++编译过程序以后,会在对应的文件夹中看到,它就是一个二进制文件,因为只有这样我们的计算机才可以读懂它。
未执行这个文件之前分为两个区域:
<1>代码区
存放CPU执行的机器指令
代码区是共享的,共享的目的是为了对于频繁被执行的程序,只需要在内存中存在一份就可以了。
代码区是只读的,使其只读的原因是防止程序意外修改改变了CPU的指令就得不偿失了
<2>全局区
全局变量和静态变量存在于此
全局区还包含了常量区,字符串常量和其他常量都在这里
该区域的数据在程序结束后由操作系统释放
综上所述,我们知道了,堆区和栈区实在开始执行这个二进制文件的时候才会出现的
下面进行简单的知识普及:
静态变量就是static放在定义的局部变量前面,该关键字的作用是可以让一个局部变量变成一个静态变量。使它从栈区到了堆区,这也就是说,本来我们调用完那个子函数之后,就要释放这个子函数包含的局部变量,经过static之后它可以一直存活到程序运行结束以后。
常量可以分为字符串常量和const修饰常量,const修饰的变量可以分为const修饰的全局变量,const修饰的局部变量。前者放在全局区,后者放在栈区。
在这里插入图片描述
总结:全局区:全局变量,静态变量,全局常量(字符串常量,const修饰的全局变量)
不在全局区:局部变量,局部常量(const修饰的局部变量)
<3>栈区
栈区可以说是被编译器牢牢控制着,我们经常用的值传递就可以感受出来,定义的形参以及局部变量在子函数使用完后被立即释放,这也就是栈区的工作特点。因此我们一定不要返回局部变量的地址,没什么意义。
<4>堆区
堆区是由我们也就是程序员去控制的,我们可以在堆区开辟和释放地址。
在这里就要引入new的概念。
new的概念直接可以看以下几个网址感觉还是蛮不错的:
https://blog.csdn.net/danieldaniel19851023/article/details/4905747
https://blog.csdn.net/zhangxinrun/article/details/5940019

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值