C与Java程序运行时的存储分配
C/C++程序运行时的存储分配
保留地址区
专门为目标机体系结构和操作系统保留的内存地址区。通常,该区域不允许普通的用户程序存取,只允许操作系统的某些特权操作进行读写。
代码区
静态存放编译程序产生的目标代码
静态数据区
该区域用于存放程序中用到的所有常量数据对象(如字符串常量,数值常量以及各种命名常量等)以及各类全局变量和静态变量所对应的数据对象。
共享库和分别编译模块
静态存放共享库模块和分别编译模块的代码和全局数据
动态数据区
运行时动态变化的堆区和栈区,堆区地址由低到高变化,栈区地址由高到低变化。在过程/函数实现的过程中,参与栈式存储分配的存储单位是活动记录,即栈上的栈帧。栈帧包含局部变量,函数实参,临时值等数据信息以及必要的控制信息。当数据对象的生存期与创建它的过程/函数的执行期无关时,一种灵活但是代价比较昂贵的存储分配方式就是堆式存储分配。
Java程序运行时存储分配
虚拟机栈
虚拟机栈就是很多人称做“栈区”的部分,保存的内容为栈帧,栈帧中的内容包括局部变量表,操作数栈,动态链接,方法出口等信息
本地方法栈
Java Native本地方法服务
堆
分配实例对象和数组的部分
方法区
类信息,静态变量,常量,已编辑代码的部分
运行时常量池
方法取的一个部分,比如string bool