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

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

可执行文件执行时的内存概图_第1张图片

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

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

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

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

你可能感兴趣的:(C++)