以兼容模式运行的 64 位系统中的虚拟地址空间
-
20-08-2019 - |
题
我发现在 64 位 Windows 操作系统上,可用的用户虚拟地址空间为 8 terra 字节。但是,如果我们正在执行的程序在 32 位兼容模式下运行,那么这么多的用户空间仍然可用吗?或者它的行为是否像普通的 32 位操作系统一样并且只提供 2GB 用户地址空间?
解决方案
微软有一个图表显示了各种限制: Windows 版本的内存限制
总结一下用户模式虚拟地址空间:
- 32 位 Windows:
- 32位进程:默认2GB;3 GB 与
/LARGEADDRESSAWARE:YES
和4GT
- 32位进程:默认2GB;3 GB 与
- 64 位 Windows(x64 架构):
- 32位进程:默认2GB;4 GB 与
/LARGEADDRESSAWARE:YES
- 64位进程:默认8TB;2 GB 与
/LARGEADDRESSAWARE:NO
- 32位进程:默认2GB;4 GB 与
4GT 是 4 GB 调整:
- 经验值:
/3GB
boot.ini 开关 - 远景:
bcdedit /set increaseuserva 3072
Mark Russinovich 发表了一篇博文,解释了许多这些限制: 突破 Windows 的极限:虚拟内存
其他提示
您过程将只看到4GB的虚拟地址空间,当它运行时作为32位的过程。它将无法地址都高。
我原来的答复是太糟糕了。下面是解释了JaredPar说的话很好的链接。
就硬件而言,当您在兼容模式下运行时(即IA32_EFER.LMA 被设置并且 L 位在 CS 的段描述符中被清除)段的行为类似于 32 位段。那是:
- 段基数限制为 32 位。
- 段限制也限制为 32 位(使用 G 位)。
这实际上将您的虚拟地址限制为 4GB。我不熟悉操作系统如何在各种模式下分区虚拟内存,但是 这 是硬件限制。(对不起...我是硬件专家,不是操作系统专家)
应当指出的是,在运行上IIS 6.0+ 32位处理与64位机/ OS,一个过程最多可寻址4GB内存。
不隶属于 StackOverflow