可执行文件执行时的内存概图

简要分析可执行文件装载->进程虚拟空间->内存的缩图
参考:
《程序员的自我修养》 P167
《C++ Primer 》 P400

这里写图片描述

对于可执行文件:
浅绿色部分:
.data 段通常保存初始化的全局对象(变量)和局部static对象
.bss 段通常保存未初始化的全局对象(变量)和局部static对象
这部分装载分配到DATA VMA(我理解为静态内存)(VMA 会映射到Memory)
黄色部分:
通常是一些只读的可执行代码,这部分装载分配到CODE VMA

静态内存,栈内存,内存池:

静态内存:用来保存局部static对象,类static数据成员以及定义在任何函数之外的对象;对象由编译器自动创建和销毁;(我的理解对于DATA VMA)
栈内存:用来保存定义在函数内的非static对象,理解栈帧(实现函数与子函数之间调用和返回),对象由编译器自动创建和销毁;(STACK VMA)
内存池:用来存储动态分配的对象(那些在程序运行时分配的对象)(HEAP VMA)

注意:栈对象仅在其定义的函数块运行时才存在,函数退出时销毁;static对象和全局对象在使用之前分配,在程序结束时销毁;动态对象的生存期由程序来控制,当对象不再使用时,我们的代码必须显示的销毁它们;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值