如何理解把内存分为4段,栈区,堆区,代码区,全局变量区?

2025-05-11 01:18:46
推荐回答(2个)
回答1:

1、栈区(stacksegment)—由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源;

2、堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收;

3、全局变量区(datasegment)—存放全局变量,静态变量和字符串常量,不释放;

4、代码区(codesegment)—存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域。

回答2:

应该是DLL, EXE等文件 分为代码区和数据区
代码区的是只读的, 防止代码恶意写入
数据区再分为只读, 读写, 只写

然后EXE载入内存的时候, 分为静态区, 栈区, 和堆区
文件数据区的数据肯定, 放在静态区
代码执行时产生的临时数据, 放在栈区
代码执行时产生的持续性数据, 放在堆区

虚拟内存是把硬盘的空间, 挪为内存使用. 系统这么做是有目的的, 包括
扩展内存, office自动存储文件, 休眠等等

虚拟内存只是个服务, 你说的分解代码和它的用途无关,
分段式和分页式是实现虚拟内存技术的时候才有意义.

最后代码区放在程序无权访问的0x7FFFFFFF以上的异次元内存空间.