90

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

4

7 回答 7

95

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

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

于 2009-03-12T17:04:38.260 回答
21

如果您与 /LARGEADDRESSAWARE 链接,则 4 GB 减去系统正在使用的内存。

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

于 2009-03-12T17:03:37.407 回答
14

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

于 2013-01-22T22:09:43.563 回答
7

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

于 2009-03-12T17:04:11.913 回答
5

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

你听到的关于特殊引导标志、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 位)最多可以访问64 GB(Windows Server 2008 企业版和数据中心版)——通过物理地址扩展 (PAE),它首先由 Intel 在 Pentium Pro 中引入,后来由 AMD 在 Athlon 处理器中引入——它定义了三个级别的页表层次结构,每个表条目是 64 位而不是 32 位,允许这些 CPU 直接访问大于 4 GB 的物理地址空间——因此理论上,32 位操作系统理论上可以访问 2^64 字节,即 17,179,869,184 GB,但该段是受限于 4GB。但是,由于营销原因,Microsoft 将非服务器操作系统上的最大可访问内存限制为仅 4GB,甚至有效的 3GB。因此,在 32 位操作系统上,单个进程可以访问超过 4GB 的空间——Microsoft SQL Server 就是一个例子。

在使用共享内核的虚拟地址空间(也称为系统空间)方面,64 位 Windows 下的 32 位进程与 64 位进程相比没有任何劣势。64 位 Windows 下的所有进程,无论是 64 位还是 32 位,都共享相同的 64 位系统空间。

鉴于系统空间由所有进程共享,在32 位 Windows上,创建大量句柄(如线程、信号量、文件等)的进程会消耗内核对象的系统空间,甚至可能耗尽内存如果您总共有很多可用内存。相比之下,在64 位 Windows上,内核空间是 64 位的,不受 4 GB 的限制。32 位应用程序进行的所有系统调用都在用户模式下转换为本机 64 位调用

于 2017-07-01T17:05:21.157 回答
-1

在 Win64 下运行 32 位进程时,您有相同的基本限制。您的应用程序在 32 但子系统中运行,该子系统尽力看起来像 Win32,这将包括您的进程的内存限制(您的内存限制为 2GB,操作系统为 2GB)

于 2009-03-12T17:03:45.300 回答
-12

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

人们认为它的 3gb 的原因是操作系统显示 3gb 空闲时他们真的有 4gb 的系统内存。

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

4Gig 不是 3 不是 2 明白了吗?

于 2012-05-14T12:27:41.517 回答