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

jjx*_*tra 82 memory windows wow64

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

Mic*_*ael 85

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

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

  • 有人可以解释为什么进程无法访问完整的4GB? (5认同)
  • 通过这个 - “因为许多应用程序依赖于指针的最高位为零”,您的意思是在遍历进程的地址空间时不考虑或使用寻址方案的第 32 位。是吗? (2认同)

MSN*_*MSN 18

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

当然,如果设置该标志,你应该更加小心指针算法.

  • @ThomasW.,这就是为什么我说"减去系统使用的东西." (7认同)
  • @ThomasW.,这不是真的,至少在 Windows 上是这样。WOW64 仍然需要 32 位 thunk 来进行 64 位系统调用。请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa384274(v=vs.85).aspx (2认同)
  • 仅供参考,链接已失效 (2认同)

小智 14

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

  • 你在谈论物理RAM,OP在谈论虚拟内存.即使在32位系统上,只要页面文件足够大,您就可以运行许多应用程序. (7认同)

Ben*_*n S 7

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

  • 如果您明确表示32位可以处理4GB空间,那么这将非常有用. (3认同)

Max*_*tin 7

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

\n\n

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

\n\n

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

\n\n

至于32位操作系统,与人们的看法相反,32位操作系统没有4GB的物理限制。例如,32 位服务器操作系统(例如 Microsoft Windows Server 2008 32 位)可以通过物理地址扩展 (PAE)访问高达64 GB (Windows Server 2008 Enterprise 和 Datacenter 版本)\xe2\x80\x93,这是首先由 Intel 在 Pentium Pro 中引入,后来由 AMD 在 Athlon 处理器中引入 - 它定义了三级页表层次结构,每个表项为 64 位而不是 32 位,允许这些 CPU 直接访问更大的物理地址空间大于 4 GB \xe2\x80\x93 因此理论上,32 位操作系统理论上可以访问 2^64 字节,即 17,179,869,184 GB,但该段限制为 4GB。然而,由于营销原因,微软将非服务器操作系统上的最大可访问内存限制为 4GB,甚至有效为 3GB。因此,单个进程可以在 32 位操作系统上访问超过 4GB 的数据 - Microsoft SQL 服务器就是一个例子。

\n\n

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

\n\n

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

\n