51Testing软件测试论坛

标题: “虚拟空间“到底有多大 [打印本页]

作者: zhanghua    时间: 2004-12-7 14:16
标题: “虚拟空间“到底有多大
我在看一片英文文档是发现:有关虚拟空间大小的描述前后有些矛盾,上面提到:虚拟空间有4G大,其中2G分配给进程,另外2G分配给操作系统(当然还有另外的分法)。我想问的是:是对每一个进程来说是这样分的(2G分配给进程,另外2G分配给操作系统),还是说所有的进程一共分配到2G,也即虚拟空间总共只有4G,而不是相对一个进程就有4G大。
希望我表述清楚了;)
还望高手们指点迷津!多谢!
作者: 曹向志    时间: 2004-12-7 14:59
标题: 友情提示
在Windiows操作系统中,每个进程可以访问4G的虚拟空间地址,但是其中2G是提供给操作系统的,程序只能另外2G的空间内存存取,每个进程可使用的就是2G空间,通过设置可以增大到3G。2G是地址空间,相当于指针访问可以访问到的空间,即32位操作系统提供进程可访问的地址,是通过2的32次方计算得到的。
作者: homeless    时间: 2004-12-7 15:08
对每一个进程都是这样分的:2G分配给进程,另外2G分配给操作系统(win2000 serv还有另一种分法即3G+1G),但是32位处理器的寻址能力只有4G(服务器的扩展映射另当别论),每个程序分4G空间是不可能的,因此系统将每一个进程独立映射到4G的虚拟内存空间,你可以看到每一个正常的exe程序的入口应该都是以0X4...开始的,而实际物理内存空间是共享的。

不好意思,看过这方面的东西时间有点久了,术语记得不太准确,大概意思是那样。
作者: zhanghua    时间: 2004-12-7 17:04
标题: 多谢?不过还有点疑问
假设系统上现在有两个进程在运行,是不是说将有8G大的虚拟空间
我知道自己的问题很傻,请见谅!以前没学过操作系统!
万分感谢楼上的两位大虾!
作者: homeless    时间: 2004-12-7 18:07
是两个独立的4G虚拟空间,互不干扰,两个进程的DLL和系统部分共享并使用相同的虚拟映射地址和物理地址,但进程自身映射的入口相同但物理地址不同。
作者: zhanghua    时间: 2004-12-8 09:11
我明白了 非常感谢你 homeless
作者: kyle_tang    时间: 2004-12-8 14:30
homeless:
请问"虚拟内存"是不是在硬盘中分出来的一块空间吗?
如果是的话,假设有两个进程,那不是要分配8G的空间,而此时硬盘没有足够的空间,那系统将如何处理?
谢谢
作者: homeless    时间: 2004-12-9 16:45
虚拟内存的确是在硬盘中分出的一块空间,
但是,并不是程序一运行就全部映射到4G的虚拟内存空间,程序初始化时分配予所需要的空间,如有需要运行时再动态分配。4G虚拟空间未使用的部分你可以用编程工具的调试模式看到全是没有实际数据的内容,比如显示为FF或??

具体的介绍可以参考 windows2000 内核编程(书名好像是这样,我不记得的,以前看的,里面对此过程有较详细的解释)
作者: kyle_tang    时间: 2004-12-9 17:49
多谢了,明白了
作者: someone5    时间: 2004-12-10 08:22
之前学过的,都快忘了,呵呵!
作者: 测试有前途    时间: 2004-12-15 23:17
好深奥啊




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2