在Windows上,通常情况下,一个32位进程只能访问2GB的RAM(或在boot.ini文件中带有特殊开关的情况下可以访问3GB)。在64位操作系统上运行32位进程时,有多少可用内存?是否有任何特殊的开关或设置可以更改此设置?
Answers:
默认为2 GB。如果应用程序知道大地址空间(与/ LARGEADDRESSAWARE链接),它将获得4 GB(而不是3 GB,请参阅http://msdn.microsoft.com/zh-cn/library/aa366778.aspx)
它们仍然限于2 GB,因为许多应用程序依赖于指针的最高位为零。
since many application depends on the top bit of pointers to be zero
您的意思是遍历进程的地址空间时不会考虑或使用寻址方案的第32位,是吗?
如果与/ LARGEADDRESSAWARE链接,则减去系统使用的4 GB内存。
似乎没有人碰到这样一个事实,如果您有许多不同的32位应用程序,则wow64子系统可以将它们映射到4G以上的内存中的任何位置,因此在具有足够内存的64位窗口上,您可以运行更多的32位应用程序而不是本机32位系统。
在64位操作系统下,单个32位进程限制为2Gb。但是,如果将其编译为IMAGE_FILE_LARGE_ADDRESS_AWARE
设置了位的EXE文件,则其限制为4 GB,而不是2 Gb-请参阅https://msdn.microsoft.com/zh-cn/library/aa366778(VS.85).aspx
您所听到的有关特殊启动标志,3 GB,/3GB
开关的信息或/userva
全部有关32位操作系统的信息,不适用于64位Windows。
有关更多详细信息,请参见https://msdn.microsoft.com/zh-cn/library/aa366778(v=vs.85).aspx。
关于32位操作系统,与之相反,对于32位操作系统没有4GB的物理限制。例如,像Microsoft Windows Server 2008 32位这样的32位服务器操作系统最多可以访问64 GB(Windows Server 2008 Enterprise和Datacenter版本)–通过物理地址扩展(PAE),它由Intel在Pentium Pro中首先引入,然后由AMD在Athlon处理器中引入–它定义了一个三层的页表层次结构,表条目各为64位而不是32位,从而使这些CPU可以直接访问大于4 GB的物理地址空间-因此,理论上,一个32位OS可以理论上访问2 ^ 64个字节,即17,179,869,184 GB,但是该段是受4GB限制。但是,由于市场原因,Microsoft将非服务器操作系统上的最大可访问内存限制为仅4GB,甚至有效地为3GB。因此,一个进程可以在32位OS上访问超过4GB的内存-以Microsoft SQL Server为例。
与使用共享内核的虚拟地址空间(也称为系统空间)的64位进程相比,在64位Windows下的32位进程没有任何缺点。在64位Windows下,所有进程(无论是64位还是32位)都共享相同的64位系统空间。
考虑到所有进程都共享系统空间的事实,在32位Windows上,创建大量句柄(例如线程,信号量,文件等)的进程会被内核对象占用系统空间,甚至会耗尽内存。如果您总共有很多可用内存。相反,在64位Windows上,内核空间为64位,不受4 GB限制。在用户模式下,由32位应用程序进行的所有系统调用都将转换为本地64位调用。
限制不是2g或3gb(32位是4gb)。
人们认为它的3gb的原因是,当他们真正拥有4gb的系统内存时,操作系统会显示3gb的空闲空间。
它的总RAM为4GB。因此,如果您有一个1 gb的视频卡,该视频卡已计入32位操作系统查看的总内存中。
4Gig不是3不是2得到了吗?