一个64位操作系统上的32位进程访问可以有多less内存?

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

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

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

如果使用/ LARGEADDRESSAWARE链接,请减去系统正在使用的内容。

当然,如果你设置了这个标志,你应该更加小心指针运算。

没有人看到如果你有许多不同的32位应用程序,wow64子系统可以将它们映射到高于4G的内存中的任何地方,所以在具有足够内存的64位窗口中,可以运行更多的32位应用程序比在本地的32位系统上。

在64位操作系统中,32位进程仍受限于相同的限制。 问题是内存指针只有32位宽,所以程序不能分配/parsing大于32位的内存地址。

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

无论哪种情况,内核的虚拟地址空间都在所有进程之间共享。 这就是为什么即使你有大量的32位进程,尽pipe你的64位操作系统有很多可用的内存,例如16 GB,32位总共可以快速耗尽内核可用的虚拟地址空间(最大2GB)。

有关特殊引导标志,3 GB,/ 3GB开关或/ userva的信息都是关于32位操作系统的,不适用于64位Windows。

有关更多详细信息,请参阅https://msdn.microsoft.com/zh-CN/library/aa366778(v=vs.85).aspx 。

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

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

32位的限制不是2g或3gb,4gb。

人们认为它的3GB的原因是,当他们真的有4GB的系统RAM时,操作系统显示3GB免费。

它的总RAM为4GB。 所以如果你有一个1 GB的显卡作为32位操作系统所看到的总RAM的一部分。

4Gig不是3不是2了吗?