5
回答
学操作系统遇到一个问题,给进程分配内存之前要知道该程序需要多少空间,是怎么预先知道的呢?
华为云实践训练营,热门技术免费实践!>>>   
代码占据的内存是好预测的,可是数据的我觉得不好预测啊
<无标签>
举报
qinuxman
发帖于5年前 5回/510阅
共有5个答案 最后回答: 5年前
还有OS用一个brk变量控制进程动态内存分配,这里会增加线性空间,(先行空间) 然后在结束进程时才一次性回收
魔兽世界现在应有16G+了,但两G内存也能玩哦,为什么呢?
--- 共有 3 条评论 ---
fengyqf应该不是单个16g的了执行文件吧?启动时只需要加载必要的文件到内存,然后动态加载或释放 5年前 回复
qinuxman回复 @guhaibin : 嗯,对于他的问题你回答的正确 5年前 回复
guhaibin虚拟内存,虚拟分页or虚拟分段+分页,是吧,嘿嘿 5年前 回复

可执行文件有代码段+全局数据段+未初始化数据段0(在inode里有长度,但是由于是未初始化的,所以没有存储在外设,只是在加载进内存时分配指定长度的未初始化线性空间)。线性空间不同于物理空间,在使用到相应先行页时才分配一页物理空间,然后把数据加载进内存(这对三个段是一视同仁的,称为需求加载)。

所以,OS会在可执行文件的inode里获得程序的线性长度,然后在需要时按相应页分别加载。大程序也能运行在小内存。

希望所说的不含糊!你能明白!

顶部