2009-01-29 99 views
9

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

回答

12

微软有表示各种限制的图表:Memory Limits for Windows Releases

总结只是用户模式虚拟地址空间:

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

4GT为4 GB的调整:

  • XP:/3GB BOOT.INI切换
  • Vista的:bcdedit /set increaseuserva 3072

标记Russinovich做了一个博客后解释许多这些限制:Pushing the Limits of Windows: Virtual Memory

0

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

+0

在Windows中,一个32位的过程只能访问2GB的内存。 – JaredPar 2009-01-29 05:08:19

+0

我想“看”也许是错误的词。我的理解是,高于2GB的内核是为内核保留的,但仍然是该进程的虚拟地址空间的一部分,并且2 GB可用于用户分配。 – RussellH 2009-01-29 05:38:07

0

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

唯一的区别是可用内存,如果您使用LargeAddressAware选项。在普通的32位处理中,这可以提供3GB的可寻址内存。在Wow64的过程中,它可以看到高达4GB(Source

+0

/LARGEADDRESSAWARE:YES会为您提供WoW64下的4 GB虚拟地址空间,而不是3 GB。 – bk1e 2009-01-29 06:15:43

0

就硬件而言,当您在兼容模式下运行(即, IA32_EFER.LMA被置位并且CS的段描述符中的L位清零)段的行为与32位段相同。即:

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

这有效地限制了你的虚拟地址4GB。我不熟悉操作系统如何在各种模式下分区虚拟内存,但这个是硬件限制。 (对不起...我是一个硬件的家伙,而不是OS专家)

0

应当指出的是,上运行IIS 6.0及更高版本的32位程序在64位机/ OS,一个进程可以解决了到4GB的内存。

相关问题