我在64位Windows操作系统上看到,可用的用户虚拟地址空间是8个terra字节。但是,如果我们正在执行的程序在32位兼容模式下运行,那么这个用户空间仍然可用吗?或者它的行为类似于普通的32位操作系统,并且只提供2GB的用户地址空间?
答案 0 :(得分:12)
Microsoft有一个显示各种限制的图表:Memory Limits for Windows Releases
仅概括用户模式虚拟地址空间:
/LARGEADDRESSAWARE:YES
和4GT /LARGEADDRESSAWARE:YES
/LARGEADDRESSAWARE:NO
4GT是4千兆字节的调整:
/3GB
boot.ini开关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说得很好的链接。
答案 4 :(得分:0)
就硬件而言,当您在兼容模式下运行时(即IA32_EFER.LMA已设置且CS的段描述符中的L位清零),这些段的行为类似于32位段。那就是:
这实际上将您限制为4GB的虚拟地址。我不熟悉操作系统在各种模式下如何划分虚拟内存,但此是硬件限制。 (对不起......我是硬件人,不是操作系统专家)
答案 5 :(得分:0)
应该注意的是,在IIS 6.0+上使用64位计算机/操作系统运行32位进程,一个进程最多可以处理4GB内存。