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,因为许多应用程序依赖于指针的最高位为零.
MSN*_*MSN 18
4 GB减去与/ LARGEADDRESSAWARE链接时系统使用的内容.
小智 14
似乎没有人触及这样一个事实:如果你有许多不同的32位应用程序,wow64子系统可以将它们映射到4G以上的内存中,所以在具有足够内存的64位窗口上,你可以运行更多的32位应用程序而不是原生的32位系统.
32位进程仍限于64位操作系统中的相同约束.问题是内存指针只有32位宽,因此程序无法分配/解析任何大于32位的内存地址.
64 位操作系统下的单个 32 位进程限制为 2Gb。但如果它被编译为设置了位的 EXE 文件IMAGE_FILE_LARGE_ADDRESS_AWARE,则它的限制为 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。
\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\n64位Windows下的32位进程在使用共享内核的虚拟地址空间(也称为系统空间)方面与64位进程相比没有任何劣势。64位Windows下的所有进程,无论是64位还是32位,都共享相同的64位系统空间。
\n\n鉴于系统空间在所有进程之间共享,在32 位 Windows上,创建大量句柄(如线程、信号量、文件等)的进程会通过内核对象消耗系统空间,甚至可能会耗尽内存如果您总共有很多可用内存。相比之下,在64 位 Windows上,内核空间是 64 位,并且不受 4 GB 的限制。32 位应用程序进行的所有系统调用都会在用户模式下转换为本机 64 位调用。
\n