学操作系统遇到一个问题,给进程分配内存之前要知道该程序需要多少空间,是怎么预先知道的呢?

qinuxman 发布于 2012/11/25 16:15
阅读 524
收藏 0
代码占据的内存是好预测的,可是数据的我觉得不好预测啊
加载中
0
fromdtor
fromdtor
还有OS用一个brk变量控制进程动态内存分配,这里会增加线性空间,(先行空间) 然后在结束进程时才一次性回收
0
Jooooooker
Jooooooker
数据不是有数据段么
0
中山野鬼
中山野鬼
这个没法预测。有个变态的程序就在不停的要资源,你内存再多也架不住。惟独是约束。
0
大东哥
大东哥
魔兽世界现在应有16G+了,但两G内存也能玩哦,为什么呢?
fengyqf
fengyqf
应该不是单个16g的了执行文件吧?启动时只需要加载必要的文件到内存,然后动态加载或释放
qinuxman
qinuxman
回复 @guhaibin : 嗯,对于他的问题你回答的正确
guhaibin
guhaibin
虚拟内存,虚拟分页or虚拟分段+分页,是吧,嘿嘿
0
fromdtor
fromdtor

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

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

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

返回顶部
顶部