根据我的理解,通过阅读几篇文章,我假设进程地址空间(PAS)和虚拟内存(VM)是相同的。我的理解有缺陷吗?有人可以对此有所了解并点亮我吗?我很困惑。
我理解进程地址空间与Ram或物理内存无关。
但是对PAS和VM感到困惑。
答案 0 :(得分:8)
首先: "memory" is not equal to "address space"。地址空间是可用地址的范围。即对于32位指针,它是4 Gb,对于64位指针,它是16 Eb。另一方面,内存是......好吧,你可以实际使用的内存(至少可能)。所以,我打赌你问的是“进程内存”是否等于“虚拟内存”,或者“进程地址空间”是否等于“虚拟地址空间”。
第二:虚拟内存是您可以在用户模式下使用的唯一内存。您无法访问物理内存。物理内存用于内核模式和驱动程序。用户模式应用程序仅适用于虚拟内存。因此,所有存储器在用户模式下都是虚拟的。无需附加“虚拟”。这是默认情况。
因此,“进程地址空间”=“[虚拟]进程地址空间” - 即单个进程的虚拟地址空间。 “记忆”也是如此:“过程记忆”=“[虚拟]过程记忆”。
第三:现在,“虚拟内存”一词通常指的是“系统虚拟内存”(全局事物),它大于一个进程。另一方面:由于寻址是特定于进程的,因此不存在“系统虚拟地址空间”(所有进程和内核的全局地址空间)。
所以答案是:
<强>实施例强>
例如,进程地址空间的典型限制是4 Gb(对于32位应用程序)。但是,进程虚拟内存的典型限制是2 Gb(对于32位计算机可以扩展到3 Gb,对于64位计算机可以扩展到4 Gb)。
另一方面,虚拟内存大于您的进程。考虑通过CreateFileMapping函数分配内存的情况。例如,您可以创建64 Gb虚拟内存块。即使64 Gb&gt;也没关系。 2 Gb。当然,你不能同时使用所有64 Gb(因为进程地址空间只有4 Gb),但是你可以按照每512 Mb的块来完成它。
另外,请考虑将相同的虚拟内存块映射到mupliple位置(多个地址)的情况。
换句话说,虚拟内存和虚拟地址之间的一对一映射不存在。