C与Java程序运行时的存储分配

C/C++程序运行时的存储分配

保留地址区

专门为目标机体系结构和操作系统保留的内存地址区。通常,该区域不允许普通的用户程序存取,只允许操作系统的某些特权操作进行读写。

代码区

静态存放编译程序产生的目标代码

静态数据区

该区域用于存放程序中用到的所有常量数据对象(如字符串常量,数值常量以及各种命名常量等)以及各类全局变量和静态变量所对应的数据对象。

共享库和分别编译模块

静态存放共享库模块和分别编译模块的代码和全局数据

动态数据区

运行时动态变化的堆区和栈区,堆区地址由低到高变化,栈区地址由高到低变化。在过程/函数实现的过程中,参与栈式存储分配的存储单位是活动记录,即栈上的栈帧。栈帧包含局部变量,函数实参,临时值等数据信息以及必要的控制信息。当数据对象的生存期与创建它的过程/函数的执行期无关时,一种灵活但是代价比较昂贵的存储分配方式就是堆式存储分配

Java程序运行时存储分配

虚拟机栈

虚拟机栈就是很多人称做“栈区”的部分,保存的内容为栈帧,栈帧中的内容包括局部变量表,操作数栈,动态链接,方法出口等信息

本地方法栈

Java Native本地方法服务

分配实例对象和数组的部分

方法区

类信息,静态变量,常量,已编辑代码的部分

运行时常量池

方法取的一个部分,比如string bool

发布了43 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/include_IT_dog/article/details/103604870