虚拟地址空间(内存管理)

进程的虚拟地址空间是指可供该进程使用的一组虚拟内存地址。 每个进程的地址空间均为私有;除非进行共享,否则其他进程无法访问该地址空间。

虚拟地址不表示内存中某一对象的实际物理位置;相反,系统会为每个进程维护一个页面表;它是一个内部数据结构,可用于将虚拟地址转换为相应的物理地址。 每当线程引用地址时,系统均会将虚拟地址转换为物理地址。

32 位 Windows 的虚拟地址空间大小为 4 GB,且分为两个分区:一个用于进程,另一个则预留以供系统使用。 有关 64 位 Windows 中虚拟地址空间的详细信息,请参阅 64 位 Windows 中的虚拟地址空间

有关虚拟内存的详细信息,请参阅以下主题:

32 位 Windows 的默认虚拟地址空间

下表显示了每个分区的默认内存范围。

内存范围 使用情况
低 2 GB(从 0x00000000 到 0x7FFFFFFF) 由进程使用。
高 2 GB(从 0xFFFFFFFF 到 0x80000000) 由系统使用。

 

具有 4GT 的 32 位 Windows 的虚拟地址空间

如果启用了 4 GB 优化 (4GT),则每个分区的内存范围如下所示。

内存范围 使用情况
低 3 GB(从 0x00000000 到 0xBFFFFFFF) 由进程使用。
高 1 GB(从 0xC0000000 到 0xFFFFFFFF) 由系统使用。

 

启用 4GT 后,在其映像标头中设置了 IMAGE_FILE_LARGE_ADDRESS_AWARE 标志的进程将有权访问高于低 2 GB 的额外 1 GB 内存。

调整 32 位 Windows 的虚拟地址空间

可使用以下命令设置一个启动项选项,而该选项可配置进程可使用的分区大小,并将其设为介于 2048 (2 GB) 与 3072 (3 GB) 之间的值:

BCDEdit /set increaseuserva Megabytes

设置该启动项选项后,每个分区的内存范围如下所示。

内存范围 使用情况
低(从 0x00000000 到 Megabytes 由进程使用。
高(Megabytes+1 到 0xFFFFFFFF) 由系统使用。

 

Windows Server 2003:将 boot.ini 中的 /USERVA 开关设为介于 2048 与 3072 之间的值。