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