根据我阅读几篇文章的理解,我假设进程地址空间(PAS)和虚拟内存(VM)是相同的。难道是我的理解有问题?有人可以解释一下这一点并启发我吗?我很困惑。
我知道进程地址空间与 RAM 或物理内存无关。
但只是对 PAS 和 VM 感到困惑。
First: “内存”不等于“地址空间” http://msdn.microsoft.com/en-us/library/windows/desktop/aa366912%28v=vs.85%29.aspx。地址空间是可能地址的范围。 IE。 32 位指针为 4 Gb,64 位指针为 16 Eb。另一方面,内存是……嗯,你可以实际使用(至少可能)的内存。所以,我打赌您会问“进程内存”是否等于“虚拟内存”,或者“进程地址空间”是否等于“虚拟地址空间”。
Second:虚拟内存是唯一可以在用户模式下使用的内存。您无法访问物理内存。物理内存用于内核模式和驱动程序。用户模式应用程序仅使用虚拟内存。因此,所有内存在用户模式下都是虚拟的。无需附加“虚拟”。这是默认的。
因此,“进程地址空间”=“[虚拟]进程地址空间”——即单个进程的虚拟地址空间。 “内存”也是如此:“进程内存”=“[虚拟]进程内存”。
Third:现在,“虚拟内存”一词通常指“系统虚拟内存”(全局的东西),它比一个进程大。另一方面:由于寻址是特定于进程的,因此不存在“系统虚拟地址空间”(所有进程和内核的全局地址空间)之类的东西。
所以,答案是:
- “进程地址空间”=“虚拟地址空间”=“地址空间”
- “进程内存”“虚拟内存”
Examples
例如,进程地址空间的典型限制是 4 Gb(对于 32 位应用程序)。但是,进程虚拟内存的典型限制是 2 Gb(对于 32 位计算机可以扩展到 3 Gb,对于 64 位计算机可以扩展到 4 Gb)。
另一方面,虚拟内存比您的进程大。考虑通过 CreateFileMapping 函数分配内存时的情况。例如,您可以创建 64 GB 虚拟内存块。即使 64 Gb > 2 Gb 也没关系。当然,您不能同时使用所有 64 GB(因为进程地址空间只有 4 GB),但您可以分块使用,例如每 512 Mb。
另外,请考虑将同一虚拟内存块映射到多个位置(多个地址)时的情况。
换句话说,虚拟内存和虚拟地址之间不存在一对一的映射。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)