在64位操作系统中使用32位应用程序内存。


13

如果我的操作系统是64位,我的32位应用程序可以使用64位内存(> 3.5GB)吗?

Answers:


6

如果该应用程序知道AWE,则它们可以使用超过4Gb的地址空间,尽管效率不如64位应用程序。如果启用了PAE并且该进程能够使用它,则32位Windows变体下的32位进程甚至有可能访问超过32位地址空间所允许的范围。

一个单独的32位进程(不了解AWE)通常限制为3Gb(其虚拟地址空间的第一个Gb保留给内核相关的操作),但是如果您正在运行多个进程,则它们将能够在总计 (每个人最多可以使用3Gb,总内存允许),因为它们的虚拟地址空间共享。

每个进程的限制在类似Unix的环境中更为有用,在该环境中,服务倾向于基于进程而不是基于线程(一个进程中的多个线程共享进程资源,因此共享单个3Gb虚拟地址空间),这一点更为常见。在Windows下在Windows中启动新进程非常昂贵,因此首选线程,在大多数Unix环境下,启动新进程并不比启动新线程多消耗资源)。例如,对于仅运行SQL Server的计算机来说,这不是很有用,因为它只是一个进程,因此将达到3Gb的限制(某些版本可以配置为AWE感知,但不是全部都可以,并且功能将在下一个主要版本中删除)

以及32位进程总共可以使用超过3Gb的内存,操作系统将能够使用任何未使用的内存进行磁盘缓存,因此,如果进程不以这种方式打开文件,则它可能不会浪费。告诉操作系统不要去做。


与IMAGE_FILE_LARGE_ADDRESS_AWARE组32位进程具有4 GB,而不是3的极限msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx
马克Sowul

5

如果应用程序使用AWE,则可以(尽管不限于64位OS)。没有它,该过程仍然仅限于4GB地址空间。


-1,虽然正确,但我认为部分答案会产生误导,因为没有(非AWE)32位进程将没有可用的4GB RAM。
pipTheGeek 2011年

@pipTheGeek错误:设置了IMAGE_FILE_LARGE_ADDRESS_AWARE = 4GB的32位进程。msdn.microsoft.com/zh-CN/library/aa366778(VS.85).aspx
Mark Sowul 2011年

@Mark-我忘记了这一点,下面我更正了我的答案。我仍然认为这个答案是不完整的。
pipTheGeek 2011年

3

Sorta,取决于您的意思。

假设Windows ...

如果操作系统是64位,则默认情况下32位进程将获得2 GB的用户地址虚拟地址空间。如果.exe文件的PE头标有IMAGE_FILE_LARGE_ADDRESS_AWARE标志,则该过程将获得4 GB的用户可寻址虚拟地址空间。无论哪种情况,内核的虚拟地址空间都与64位进程相同,因为它在所有进程之间共享。还要注意的是,未设置IMAGE_FILE_LARGE_ADDRESS_AWARE标志的64位进程也只能访问2 GB的用户虚拟地址空间。

您听到的有关特殊引导标志,3 GB,/ 3GB开关或/ userva的信息都是关于32位操作系统的,不适用于64位Windows。

在Microsoft的“ Windows版本内存限制”页面上,所有这些细节都令人发指。

@David Spillett的回答还涉及到另一点:多个进程,所有进程都限于2 GB的用户空间,如果可用,仍然可以使用大量的RAM,文件缓存也可以使用。


0

32位OS上的32位进程具有4GB的地址空间,其中2GB由OS保留,该进程可使用2GB。
可以为操作系统指定一个开关(/ 3GB),将仅保留给操作系统的预留空间更改为1GB,并允许进程拥有3GB BUT,但前提是进程在标志中声明自身为大型地址可执行文件。

在64位操作系统上,如果能够识别大地址,则32位进程将获得4GB,否则将获得2GB。

所有这些都是针对不了解AWE的流程的。如果该进程能够使用AWE,那么,正如其他人所说,它可以使用较大的地址空间,但效率不如64位进程。

PAE允许32位OS使用超过4GB的RAM,但是,它存在兼容性问题,并且在XP中被其中一个服务包禁用,因此仅在服务器OS版本上可用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.