gpt4 book ai didi

windows - 进程地址空间与虚拟内存

转载 作者:可可西里 更新时间:2023-11-01 13:29:28 28 4
gpt4 key购买 nike

根据我阅读几篇文章的理解,我假设进程地址空间 (PAS) 和虚拟内存 (VM) 是相同的。我的理解有问题吗?有人可以阐明这一点并照亮我吗?我很困惑。

我了解进程地址空间与 Ram 或物理内存无关。

但只是对 PAS 和 VM 感到困惑。

最佳答案

第一: "memory" is not equal to "address space" .地址空间是可能地址的范围。 IE。 32 位指针为 4 Gb,64 位指针为 16 Eb。另一方面,内存是……好吧,您可以实际使用(至少可能)的内存。所以,我敢打赌你是在问“进程内存”是否等于“虚拟内存”,或者“进程地址空间”是否等于“虚拟地址空间”。

第二: 虚拟内存是唯一可以在用户模式下使用的内存。您无法访问物理内存。物理内存用于内核模式和驱动程序。用户模式应用程序仅使用虚拟内存。因此,所有内存在用户模式下都是虚拟的。无需附加“虚拟”。这是默认设置。

因此,"Process Address Space"= "[Virtual] Process Address Space"- 即单个进程的虚拟地址空间。 “内存”也是如此:“进程内存”=“[虚拟]进程内存”。

第三:现在,“虚拟内存”一词通常指的是“系统虚拟内存”(全局事物),它比一个进程更大。另一方面:由于寻址是特定于进程的,因此不存在“系统虚拟地址空间”(所有进程和内核的全局地址空间)之类的东西。

所以,答案是:

  1. "进程地址空间"= "虚拟地址空间"= "地址空间"
  2. “进程内存”<>“虚拟内存”

示例

例如,进程地址空间的典型限制是 4 Gb(对于 32 位应用程序)。但是,进程虚拟内存的典型限制是 2 Gb(对于 32 位机器可以扩展到 3 Gb,对于 64 位机器可以扩展到 4 Gb)。

另一方面,虚拟内存比您的进程大。考虑通过 CreateFileMapping 函数分配内存时的情况。例如,您可以创建 64 Gb 虚拟内存块。即使 64 Gb > 2 Gb 也没关系。当然,您不能同时使用所有 64 Gb(因为进程地址空间只有 4 Gb),但您可以分块使用,比如说,每 512 Mb。

此外,请考虑将同一虚拟内存块映射到多个位置(多个地址)的情况。

换句话说,虚拟内存和虚拟地址之间不存在一对一的映射。

关于windows - 进程地址空间与虚拟内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8109478/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com