我发现在 64 位 Windows 操作系统上,可用的用户虚拟地址空间为 8 terra 字节。但是,如果我们正在执行的程序在 32 位兼容模式下运行,那么这么多的用户空间仍然可用吗?或者它的行为是否像普通的 32 位操作系统一样并且只提供 2GB 用户地址空间?

有帮助吗?

解决方案

微软有一个图表显示了各种限制: Windows 版本的内存限制

总结一下用户模式虚拟地址空间:

  • 32 位 Windows:
    • 32位进程:默认2GB;3 GB 与 /LARGEADDRESSAWARE:YES 和4GT
  • 64 位 Windows(x64 架构):
    • 32位进程:默认2GB;4 GB 与 /LARGEADDRESSAWARE:YES
    • 64位进程:默认8TB;2 GB 与 /LARGEADDRESSAWARE:NO

4GT 是 4 GB 调整:

  • 经验值: /3GB boot.ini 开关
  • 远景: bcdedit /set increaseuserva 3072

Mark Russinovich 发表了一篇博文,解释了许多这些限制: 突破 Windows 的极限:虚拟内存

其他提示

您过程将只看到4GB的虚拟地址空间,当它运行时作为32位的过程。它将无法地址都高。

我原来的答复是太糟糕了。下面是解释了JaredPar说的话很好的链接。

http://msdn.microsoft.com/en-us/library /ms189334.aspx

就硬件而言,当您在兼容模式下运行时(即IA32_EFER.LMA 被设置并且 L 位在 CS 的段描述符中被清除)段的行为类似于 32 位段。那是:

  • 段基数限制为 32 位。
  • 段限制也限制为 32 位(使用 G 位)。

这实际上将您的虚拟地址限制为 4GB。我不熟悉操作系统如何在各种模式下分区虚拟内存,但是 是硬件限制。(对不起...我是硬件专家,不是操作系统专家)

如果您的程序在 Wow64 子系统上作为 32 位进程运行,它将看到与在实际 32 位操作系统上看到的完全相同的地址空间。如果没有特殊选项,32 位进程将有 2GB 可用内存。

唯一的区别是可用内存(如果您使用 大地址感知 选项。在正常的 32 位进程中,这允许 3GB 的可寻址内存。在 Wow64 进程中它最多可以看到 4GB (来源)

应当指出的是,在运行上IIS 6.0+ 32位处理与64位机/ OS,一个过程最多可寻址4GB内存。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top