在64位操作系统上32位进程可以访问多少内存?

时间:2009-03-12 17:00:38

标签: windows memory wow64

在Windows上,在正常情况下,32位进程只能访问2GB的RAM(或者带有boot.ini文件中的特殊开关的3GB)。在64位操作系统上运行32位进程时,可用内存量是多少?是否有任何特殊的开关或设置可以改变这种情况?

7 个答案:

答案 0 :(得分:80)

默认为2 GB。如果应用程序是大地址空间感知(与/ LARGEADDRESSAWARE链接),它将获得4 GB(而不是3 GB,请参阅http://msdn.microsoft.com/en-us/library/aa366778.aspx

它们仍然限制在2 GB,因为许多应用程序依赖指针的最高位为零。

答案 1 :(得分:18)

4 GB减去与/ LARGEADDRESSAWARE链接时系统使用的内容。

Of course, you should be even more careful with pointer arithmetic if you set that flag.

答案 2 :(得分:14)

似乎没有人触及这样一个事实,即如果你有许多不同的32位应用程序,wow64子系统可以将它们映射到4G以上的内存中,所以在具有足够内存的64位窗口上,你可以运行更多32应用程序而不是本机32位系统。

答案 3 :(得分:7)

32位进程仍限于64位操作系统中的相同约束。问题是内存指针只有32位宽,因此程序无法分配/解析任何大于32位的内存地址。

答案 4 :(得分:3)

64位操作系统下的单个32位进程限制为2Gb。但如果将其编译为设置了IMAGE_FILE_LARGE_ADDRESS_AWARE位的EXE文件,则其限制为4 GB,而不是2Gb - 请参阅https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

在任何一种情况下,内核的虚拟地址空间都在所有进程中共享。这就是为什么即使您有大量的32位进程,尽管您的64位操作系统可以使用大量内存(例如16 GB),但它们可能会耗尽内存。总共32位进程可以快速耗尽内核可用的虚拟地址空间(最大2GB)。

您听到的有关特殊启动标志,3 GB,/ 3GB开关或/ userva的内容均与32位操作系统有关,不适用于64位Windows。

有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx

与32位操作系统相反,32位操作系统没有4GB的物理限制。例如,32位服务器操作系统(如Microsoft Windows Server 2008 32位)可以通过物理地址扩展(PAE)访问最多 64 GB (Windows Server 2008 Enterprise和Datacenter版本),这是Intel在Pentium Pro中首次引入的,后来由AMD在Athlon处理器中引入 - 它定义了三个级别的页表层次结构,每个表的条目为64位而不是32位,允许这些CPU直接访问物理地址大于4千兆字节的空间 - 理论上,32位操作系统理论上可以访问2 ^ 64字节,或17,179,869,184千兆字节,但该段受4GB的限制。但是,由于市场原因,微软已将非服务器操作系统上的最大可访问内存限制为仅4GB,甚至3GB。因此,单个进程可以在32位操作系统上访问超过4GB的内容 - 而Microsoft SQL服务器就是一个例子。

答案 5 :(得分:-1)

在Win64下运行32位进程时,您有相同的基本限制。您的应用程序运行在32但子系统中,它最好看起来像Win32,这将包括您的进程的内存限制(对您来说低2GB,对于操作系统高2GB)

答案 6 :(得分:-10)

对于32位,限制不是2g或3gb,而是4gb。

人们认为3gb的原因是当操作系统真正拥有4GB系统RAM时,操作系统显示3gb空闲。

它的总内存为4GB。因此,如果您有一个1 GB的视频卡,它被视为32位操作系统查看的总RAM的一部分。

4Gig不是3不是2了吗?