在Windows操作系统下,普通情况下32位进程只能访问2GB的内存(通过boot.ini文件中的特殊开关可以实现3GB)。在64位操作系统上运行32位进程时,可用内存有多少?是否有任何特殊开关或设置可以更改这个情况?
默认情况下为 2 GB。如果应用程序具有大地址空间感知功能(使用 /LARGEADDRESSAWARE 链接),则可获得 4 GB(而不是 3 GB,请参见http://msdn.microsoft.com/en-us/library/aa366778.aspx)。
由于许多应用程序依赖于指针的最高位为零,因此它们仍然受到 2 GB 的限制。
/LARGEADDRESSAWARE标志链接后系统使用的空间减去4GB。
似乎没有人触及一个事实,即如果您有许多不同的32位应用程序,则wow64子系统可以将它们映射到4G以上的任何内存位置,因此在具有足够内存的64位Windows上,您可以运行比本机32位系统更多的32位应用程序。
32位进程在64位操作系统中仍然受到相同的限制。问题在于内存指针只有32位宽,因此程序无法分配/解析大于32位的任何内存地址。
IMAGE_FILE_LARGE_ADDRESS_AWARE
位设置的EXE文件,则其限制为4GB,而不是2GB-请参见https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx。/3GB
开关或/userva
,这些都是针对32位操作系统的,不适用于64位Windows。在Win64下运行32位进程时,你将面临相同的基本限制。你的应用程序在一个32位子系统中运行,尽可能地模拟Win32,并且这将包括进程的内存限制(你的下2GB,操作系统的上2GB)。
限制不是2g或3gb,而是32位系统的4gb。
人们认为它是3gb的原因是操作系统显示有3gb可用内存,但实际上他们有4gb的系统内存。
总共有4gb的RAM。所以如果您有1 gb的显卡,它将计入32位操作系统查看的总内存中。
4Gig而不是3或2,明白了吗?