32 位操作系统机器可以用完所有 8GB RAM + 20GB 页面文件吗?

ath*_*hos 100 memory 32-bit

我对 32 位操作系统的理解是,地址以 32 位表示,所以操作系统最多可以使用 2 32 = 4G 内存空间——我假设单位是字节,所以 4GB。

这是否意味着如果任何具有 32 位操作系统(无论是 Windows 还是 Unix)的机器在硬盘上总共有超过 4GB 的 RAM + 页面文件,例如 8GB 的​​ RAM 和 20GB 的页面文件,它的内存将永远不会被“用完” “?

通过“用起来”我的意思是增加RAM或页面文件将不利于性能; 当然,应用程序总是有可能不断从操作系统请求内存但失败。

同样,如果这台 32 位操作系统机器有 2GB RAM 和 2GB 页面文件,增加页面文件大小对性能没有帮助。这是真的?

Eri*_*ert 145

我对 32 位操作系统的理解是,地址以 32 位表示,因此操作系统最多可以使用 2^32 = 4GB 内存空间

进程可以处理的最多为 4GB。您可能会将内存地址空间混淆。 一个进程可以拥有比地址空间更多的内存。这是完全合法的,并且在视频处理和其他内存密集型应用程序中很常见。 一个进程可以被分配几十 GB 的内存,并且可以随意将其交换进出地址空间。一次只有 2 GB 可以进入用户地址空间。

如果你家有一个四车位车库,你仍然可以拥有五十辆车。你不能把它们都放在你的车库里。你必须在其他地方有辅助存储来存储至少 46 个;你把哪些车停在车库里,哪些车停在街对面的停车场里,取决于你。

这是否意味着任何32位操作系统,无论是Windows还是unix,如果机器有RAM+硬盘上的页面文件超过4GB,例如8GB RAM和20GB页面文件,就永远不会“内存用完”?

绝对不是那个意思。单个进程可以使用比这更多的内存!同样,进程使用的内存量几乎与进程使用的虚拟地址空间量完全无关。就像您在车库中保留的汽车数量与您拥有的汽车数量完全无关一样。

而且,两个进程可以共享非私有内存页。如果 20 个进程都加载同一个 DLL,则这些进程都共享该代码的内存页。它们不共享虚拟内存地址空间,而是共享内存

我的观点是,如果不清楚,您应该停止将内存和地址空间视为同一件事,因为它们根本不是同一件事。

如果这台 32 位操作系统机器有 2GB RAM 和 2GB 页面文件,增加页面文件大小将无助于性能。这是真的?

你有五十辆车和一个四车位的车库,在街上有一个 100 辆车的停车场。您将停车场的大小增加到 200 个停车位。由于您现在拥有 150 个额外停车位而不是 50 个额外停车位,您的汽车是否变得更快?

  • @Rig:太棒了,我很高兴听到您的建设性批评。现在是您**写出更好的答案** 并向我们展示您认为不那么具有欺骗性和更中肯的那种答案的机会。 (49认同)
  • 我发现这个答案并没有解决手头的问题,而且在某些方面几乎具有欺骗性。 (27认同)
  • @BlueRaja:我怀疑您将*物理内存* 与*内存* 混淆了。物理内存只是一种允许更快访问内存的优化。正如处理器缓存是一种优化,允许更快地访问内存。**内存**用于所有意图和目的**页面文件中保留的空间。**页面文件中的给定页面是(1)映射到虚拟内存地址还是(2)从磁盘复制到物理内存与是否*分配*的问题无关。 (4认同)
  • @BlueRaja:Raymond Chen 关于这个主题的文章可能会有所帮助。他展示了如何从页面文件中分配 4GB;那是*进程拥有的内存*。该进程当然不能一次*寻址*整个事物,但它可以通过将页面映射到未使用的 VM 页面,使用它一段时间,然后丢弃它来寻址*任何页面*。http://blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx (4认同)
  • 埃里克,如果您明确表示 Windows(和其他操作系统)允许您“保留”内存而无需在您的虚拟地址空间中实际拥有它,那么这个答案会更清楚,然后回答明显的问题“那么您如何解决它?”。我认为答案是“您可以使用某种页面 ID 来引用它,以便将其分页到虚拟地址空间中,然后您可以在那里寻址”,但我不知道,并且你的回答没有说​​:) (3认同)
  • @BlueRaja:一个 32 位进程永远不能*寻址*超过 4GB 的虚拟地址空间,但它可以*分配*任意多。再次回到我的比喻。您可以在停车场(页面文件)中预订停车位(页面)。你是否在里面装车是你的事;该位置保留供您使用。如果你想上车,但你的车库(虚拟内存)已满,那么你从车库开一辆车(页面)到停车场,然后从停车场开另一辆车到车库。 (2认同)
  • @BlueRaja:您可能习惯于只调用 VirtualAlloc,当然这会为您提供映射到虚拟内存的内存。但是内存映射文件也是内存,你可以制作一个只部分映射到虚拟内存的内存映射文件。 (2认同)

Dav*_*ebb 69

CPU 确实只能处理最大 4Gb 的 RAM。但是,当前的 CPU 使用 MMU(内存管理单元)将特定于进程的内存地址转换为物理内存地址。

这个 MMU 用于各种不同的技巧,从内存隔离(进程 A 不能操作进程 B 的内存)到内存共享(进程 A 可以访问与进程 B 相同的物理内存区域并可以通过这种方式交换数据)。

尽管 32 位 CPU 仅支持每个进程 4Gb 的内存,但在使用物理地址扩展时它可以寻址高达 64Gb 的 RAM 。这允许进程 A 使用前 4Gb 的内存,而进程 B 使用下一个 4Gb。总共使用了超过 4Gb 的物理内存,但单个进程使用的内存总量仍限制在 4Gb

自内核版本 2.3.23 起,Linux 和某些 32 位版本的 Windows Server 支持 PAE,但不支持 32 位 Windows XP、Vista 或 7。

如果您的 CPU 不支持 PAE,您将被限制为 4GB 的物理内存(或更少,取决于其他因素)。

请注意,无论 CPU 支持 PAE,您的操作系统仍然可以将部分物理内存驱逐到磁盘(页面文件)。这确保您可以启动使用超过 4Gb 的多个进程。PAE 的唯一影响是您是否可以在运行进程 A 时将进程 B 的 4Gb 保留在物理内存中。

  • Windows XP 确实支持 PAE(我认为从 SP2 开始),但即使机器支持 PAE,也会忽略超过 4GB 的 RAM;请参阅 [此处](http://msdn.microsoft.com/en-us/windows/hardware/gg487503)。它用于基于硬件的数据执行保护——NX/XD 位仅在 PAE 页表条目中可用,而不是“常规”页表条目。 (11认同)
  • @DanNeely [操作系统 ** 确实有支持](http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778%28v=vs.85%29.aspx) 内存,它是有限的 [由于许可问题](http://www.geoffchappell.com/notes/windows/license/memory.htm)。虽然我同意这是第三方黑客攻击,但它仅适用于 Windows 的消费者变体。基于服务器的 Windows 发行版,从 **Windows 2000** 开始,已经支持超过 4GB 的内存(参考第一个链接)。 (7认同)
  • 我要补充一点,消费者版本的 32 位 Windows 不支持 > 4GB 内存的原因是发现大量硬件驱动器无法在那么多内存下正常工作;并且由于当时在服务器/超高端工作站之外,4GB 的内存极为罕见,因此大多数维护驱动程序的公司对花钱更新驱动程序不感兴趣,而这些驱动程序只会被其客户群的 0.1% 使用。 (5认同)

Bre*_*ugh 15

特别是关于 32 位 Windows 变体,自 Windows 2003 变体以来,它们已经支持超过 4GB 的 RAM(您还可以获得Windows 7内核破解,以允许您在 32 位中使用所有 RAM)。但是,正如您在问题的第一部分中概述的那样,这是有代价的。

在 32 位操作系统中,指针(内存地址)的大小与 CPU 的字长相同,32 位,允许(如您所述)2^32 = 4GB 内存空间。Windows 还为应用程序采用“虚拟内存”方法,因此每个应用程序都有自己的内存空间。

由于每个指针只有 32 位宽,每个应用程序的指针最多只能寻址 4GB 的内存,即使系统可以支持超过 4GB 的 RAM。据我所知,这是在 32 位操作系统中使用超过 4GB RAM 的唯一警告。总的来说,您可以让许多应用程序使用超过 4GB 的 RAM,但任何一个特定进程最多只能分配/访问 4GB。


回到您的问题,假设您有一个使用 2GB RAM 的程序。如果您有这个程序的 10 个实例,那就是 20GB。将用完所有 8GB 的​​ RAM,以及另外 12GB 的页面文件。所以是的,在 32 位操作系统下,用完这个内存是很有可能的。

如果这台 32 位操作系统机器有 2GB RAM 和 2GB 页面文件,增加页面文件大小将无助于性能。这是真的?

增加页面文件大小通常不会提高性能(除非您的 RAM 和页面文件设置为绝对最小值,或者设置得如此之低,否则您的计算机会不断颠簸)。但是,它会防止您的计算机耗尽(虚拟)内存。每当需要将任何内容清除到页面文件时,您就已经遭受了巨大的性能损失(因为硬盘驱动器比您的 RAM 慢几个数量级)。

  • 小心像*“增加页面文件大小永远不会提高性能”* 这样的笼统声明,页面文件太小而导致磁盘抖动比拥有更大的页面文件更严重是完全有可能的!请参阅 [此问题](http://superuser.com/a/14796/16858) 中的答案和评论。 (2认同)