9

我看到在 64 位 Windows 操作系统上,可用的用户虚拟地址空间是 8 terra 字节。但是,如果我们正在执行的程序在 32 位兼容模式下运行,那么还有这么多的用户空间可用吗?还是它的行为类似于普通的 32 位操作系统并且只提供 2GB 的用户地址空间?

4

6 回答 6

12

Microsoft 有一张图表显示了各种限制:Windows 版本的内存限制

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

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

4GT 是 4 GB 调优:

  • XP:/3GBboot.ini 开关
  • 远景:bcdedit /set increaseuserva 3072

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

于 2009-01-29T06:13:38.507 回答
0

当您的进程作为 32 位进程运行时,它只会看到 4GB 的虚拟地址空间。它将无法解决更高的问题。

于 2009-01-29T05:01:52.257 回答
0

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

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

于 2009-01-29T05:07:48.860 回答
0

我原来的答案很糟糕。这是一个链接,可以很好地解释 JaredPar 所说的内容。

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

于 2009-01-29T05:48:13.020 回答
0

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

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

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

于 2009-01-29T07:15:06.170 回答
0

需要注意的是,在带有 64 位机器/操作系统的 IIS 6.0+ 上运行 32 位进程,一个进程最多可以寻址 4GB 内存。

于 2011-04-12T13:45:35.267 回答