虚拟地址空间(内存管理)
进程的虚拟地址空间是指可供该进程使用的一组虚拟内存地址。 每个进程的地址空间均为私有;除非进行共享,否则其他进程无法访问该地址空间。
虚拟地址不表示内存中某一对象的实际物理位置;相反,系统会为每个进程维护一个页面表;它是一个内部数据结构,可用于将虚拟地址转换为相应的物理地址。 每当线程引用地址时,系统均会将虚拟地址转换为物理地址。
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 之间的值。