64位系统中以兼容模式运行的虚拟地址空间

时间:2009-01-29 04:58:33

标签: 64-bit compatibility virtual-address-space

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

6 个答案:

答案 0 :(得分:12)

Microsoft有一个显示各种限制的图表:Memory Limits for Windows Releases

仅概括用户模式虚拟地址空间:

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

4GT是4千兆字节的调整:

  • XP:/3GB boot.ini开关
  • Vista:bcdedit /set increaseuserva 3072

Mark Russinovich撰写了一篇博文,解释了许多这些限制:Pushing the Limits of Windows: Virtual Memory

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我原来的答案非常糟糕。这是一个解释JaredPar说得很好的链接。

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

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

应该注意的是,在IIS 6.0+上使用64位计算机/操作系统运行32位进程,一个进程最多可以处理4GB内存。