C++内存模型

在C语言中内存主要分为四个区  即  代码区 、 全局区 、 栈区 、堆区 。下面详细说明一下这四个区作用以及存放的内容。  

1.代码区:

   代码区在程序执行之前就存在了 , 里面主要存放一些机械码 比如二进制码 ,就是程序的代码 ,当执行程序的时候会将这些二进制的代码转换为刻度的代码  , 主要是由系统进行管理的

2.全局区 :

   全局区顾名思义 就是存放和全局有关的内容的 全局变量  常量  静态变量 静态全局变量 字符串常量等等 。这个区的内容会在程序执行结束后由系统自动释放

3.栈区

   栈区 主要是存储 局部变量 和函数的形参变量的   。 它的内容 在函数执行完毕以后会被释放 。如果函数的返回值是 局部变量的地址 或者是某个形参变量的地址的时候 就特别需要注意 放回回去的地址 编译器 回做一次保存 但是 如果多次使用这个地址 编译器不会每次都保存的 就会出现 地址丢失的情况  。

4.堆区

   开辟堆区的内存 可以使用new关键字来开辟内存空间 , 堆区的内容是由开发者自己开辟创建的 不是有系统创建。并且它的释放也不会随函数的灭亡二消失  , 为什么 数据在栈区会随函数灭亡呢?这里就具体讲一下。

     如果是在栈区开辟的空间 变量所保存的数据会存在于栈的地址中 这句话是什么意思呢 :

 当数据也保留在了栈区的时候 当函数调用完成之后 这个变量的地址也会随之释放 地址被释放了 就没有地址也就是指针指向了这个数据  相当于这个数据也就释放了d

但是如果是在堆区开辟的内存空间 使用new关键字开辟 同时也是一个局部变量 会在栈下也留下地址 在堆下也留下一样的地址 当栈的地址释放了  但是还有堆的地址指向这个数据 编译器会找到这个堆的地址 获取数据

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值