为什么Windows只显示我的4 GB RAM大约3.5 GB?


90

我最近将计算机的RAM升级到4 GB。我的32位Windows安装仅显示3574 MB的内存。如何让Windows使用全部RAM?


2
这只是今天早上在superuser.com/questions/27006
汤姆2009年

3
这需要像2000票一样被提升,因为我似乎每天遇到另一个人问“我的记忆在哪里?” 微软应该从对话框中取出它。。。
surfasb 2011年

2
伙计,你需要64位操作系统。说真的,现在开始存钱。如果你的系统实际上支持你可以在主板上填充的所有内存,那么这个问题将成为一个没有实际意义的问题。
Fiasco Labs 2012年

1
在系统单元周围小心地感受潮湿或潮湿。这可能是“内存泄漏”。
EleventhDoctor

@ala:因为内核内存分裂...(由内核分配1Gb)。看来你已经在使用/ 3gb交换机...
user2284570 2014年

Answers:


70

你不能:

看看Dude,哪里是我的4 GB内存?

如果你想将内存和设备放入32位地址范围:并不是所有可用的4GB地址空间都可以放到内存中。
那么,如果你出去为你的PC购买4GB内存,会发生什么?
IO的内存映射中有一个漏洞。(现在它只占总地址空间的25%,但它仍然是一个很大的漏洞。)因此,你的内存底部3GB将可用,但最后1GB存在问题。

唯一可行的解​​决方案是安装64位操作系统。在Windows Vista及更高版本中,32位和64位许可证密钥可以互换。如果您可以获得64位版本操作系统的Windows安装介质,则可以使用原始许可证密钥重新安装。


我不明白 - 是不是2 ^ 32 4千兆字节?
马特2009年

6
啊,没关系,实际上阅读了链接文章
马特2009年

很高兴知道这一点
刘艳研研究

@VonC:这个怎么样?
user2284570 2014年

@ user2284570是的,PAE可以提供帮助,但是谁还在使用WXp?;)
VonC 2014年

8

首先,Windows XP(32位)仅支持4 GB。这不仅适用于Windows XP。相反,它适用于32位桌面Windows - 带有PAE的32位Linux系统和许多32位Windows Server版本,每个链接文章支持超过4GB。如果您使用的是32位Windows XP,则永远不会看到超过4 GB。但是,我确实找到了一个更详细的原因,为什么你的系统显示的可用内存少于实际安装的ram。

3GB-not-4GB RAM问题(Microsoft MSDN博客):

由于很久以前做出的架构决策,如果您安装了4GB的物理RAM,Windows只能报告部分物理4GB的RAM(范围从~2.75GB到3.5GB,具体取决于所安装的设备,主板的芯片组和BIOS)。

此行为是由于“内存映射IO保留”。这些保留覆盖了物理地址空间并屏蔽了这些物理地址,因此它们不能用于工作内存。这与在机器上运行的OS无关。

大大低于4GB的地址空间(通过32位可访问的最高地址)将被保留供系统硬件使用:

  • BIOS - 包括ACPI和传统视频支持
  • PCI总线包括桥接等
  • PCI Express支持将至少保留256MB,最高可达768MB,具体取决于显卡的内存

这意味着典型的系统可能会看到~256MB和1GB以下的地址空间低于4GB,这是为操作系统无法访问的硬件使用而保留的。英特尔芯片组规格非常擅长解释默认情况下保留的地址范围,并且在某些情况下会调出1.5GB始终保留,因此Windows无法访问。

如果您查看来源,可以获得更多信息。但是,如果您按照这些说明操作,则可以使用已安装的完整8 GB 。

从个人经验来看,这不是新问题。几年前,当我第一次发布Vista时,我构建了一个4 GB的32位Windows Vista系统,我遇到了同样的问题。网上有无数论坛帖子与这个相同的话题有关。

另请参阅Microsoft KB 929605 - 如果安装了4 GB的RAM,则Windows Vista中“系统信息”对话框中报告的系统内存少于预期


如果基础架构是64位,那么Microsoft 在此处说明Windows XP支持高达128GB的RAM。你能否请更新你的答案?
Dan Dascalescu

@SgtOJ:这个怎么样?
user2284570 2014年

1
@SgtOJ:4 GB RAM限制不适用于“所有32位操作系统”。完全支持PAE的32位操作系统(如Windows Server 2003)可以使用超过4 GB的RAM。“32位”限制虚拟地址空间,而不是物理空间。
Jamie Hanrahan 2014年

@JamieHanrahan表示单个程序仍然不能使用超过4GB。我认为他的意思是IO预留开销与操作系统无关。
jiggunjer 2015年

@jiggunjer我在评论的问题或答案中没有任何地方说它或暗示被问到的是“单个程序”可以使用什么。I / O保留也不是严格独立于操作系统。
Jamie Hanrahan 2015年

3

如果您使用的是32位Windows XP,则无法实现。由于没有足够的地址空间可用于使用额外的RAM

最好的解决方案是升级到64位版本的Windows,因为它支持4 GB以上的RAM。


2^32足够的“地址空间”适合4 GiB。你错了地址空间和物理内存。现代Windows版本上的每个进程都会看到完整的4 GiB地址空间,即使由于虚拟地址空间的UM / KM分区通常只有2 GiB可用。
0xC0000022L

@ 0xC0000022L:这不是这里讨论的问题。
Ben Voigt

据微软称,大多数Windows 7版本(包括32位)支持高达192GB的RAM。唯一的要求是底​​层架构是64位。所以最好的解决方案是从XP升级到Windows 7.你能否更新你的答案?
Dan Dascalescu

@Shaharyar:这个怎么样?
user2284570 2014年

3

正如其他人所说,这是不可能的。

说明:

每块内存都有一个地址。操作系统指定地址的长度。对于较旧的操作系统,地址长度为32位,仅允许2 ^ 32(4 294 967 296)个地址。现在,看看这个数字,看起来您的操作系统应该支持4 GB,但是具有内部存储器的所有其他硬件(最重要的是视频卡中的视频RAM)也会映射到该地址空间。

这就像你试图分发1,200,000个六位数的电话号码。


你正在混淆RAM和地址空间。
0xC0000022L

@ 0xC0000022L:不,他不是。他在谈论物理地址空间,而RAM必须映射为可用。
Ben Voigt

@BenVoigt:这个怎么样?
user2284570 2014年

如果编写了所有内核代码来使用它,那么PAE很棒。不幸的是,许多内核代码是由第三方编写的驱动程序,这些驱动程序几乎无法通过平坦的内存模型获得稳定的东西。启用PAE需要使用平面模型假设丢弃所有现有驱动程序。这就是Windows服务器启用PAE而客户端不支持的原因。请参阅史蒂夫的回答。
Ben Voigt 2014年

@BenVoigt:自1997年以来,假设内存<4GB的驱动程序很少见,因为所有WDM驱动程序都可以安装在Windows 2000/2003上...
user2284570 2014年

3

旧主板仅支持4Gb物理RAM,现代支持更多。英特尔P4 CPU总是可以处理超过4Gb(通过使用称为物理地址扩展或PAE的东西)

Microstoft做出了“营销决策”,不支持其所有32位版本操作系统的“客户端”版本中的4Gb物理地址空间 - 包括从w2k到32位Windows 8的所有版本(如果您访问MS KB)页面你会注意到32位服务器版本可以支持更多 - 高达128Gb我相信32位'企业版') - 这就是为什么'正确'32位操作系统(Linux等)在完全相同的硬件上可以始终访问所有物理RAM。

(旁注 - 32位Win7用户厌倦了这个“愚蠢”的限制,他们“攻击”了Kernal以允许进入完整的物理RAM ..不用说,这打破了你的许可证,在美国实际上是非法的(DCMA) )

Windows XP 32bit'保留'用于驱动程序的低4Gb地址空间的一部分。没有理由你不能“解决”4Gb之外的物理RAM(使用PAE),但是在Windows XP Pro时,许多OLDER驱动程序都没有这样做,你会收到“BSOD”错误(现代驱动程序使用PAE)正确和理论上没有理由他们需要超过大约32Mb的'lo'空间页面(作为'窗口')甚至支持2Gb显卡(2gb将在'hi'空间,即4Gb以上标记)

在XP SP2中,MS几乎将驱动器的“保留”地址空间增加了三倍,以消除BSOD,并且从那时起(MS不想'调试'驱动程序==他们想要卖给你64位)操作系统)。ACTUAL硬件对这个“保留”空间的影响几乎为零。

所以,如果你有4Gb或更多的物理内存,大多数XP专业版sp2 +将会看到大约3.25Gb ..其余的可以使用各种不同的RAM磁盘驱动程序访问(当然不是MS)=去寻找一些东西使用XP Pro上的“隐形地址空间”或“高4gb空间”。使用'缺失'.75Gb作为“虚拟内存”的一部分可以加速您的系统......

请注意,/ 3G开关可以允许32位应用程序在32位操作系统上访问高达3Gb(如果他们的.exe标头中设置了LargeAddressAware标志 - 在这种情况下,他们可以在64位操作系统上访问高达4Gb)但在XP上你需要指定/ USERVA以阻止操作系统被“挤出”RAM :-)


如果将/ PAE开关添加到boot.ini,Windows XP SP1支持> 4GB的RAM
2284570 2014年

0

如果您想使用完整的4GB,唯一的选择是升级到64位操作系统:

  • Windox XP 64
  • Windows Vista 64
  • Linux的
  • 最大OS / X(好吧,你也可能需要一台新的PC)

正常的Windows XP只有32位,这将内存限制为最大3.5gb。查看VonC发布的链接,了解有关此主题的详细信息。


32位不会将内存限制在3.5Gb max。这是其他设备占用可用的地址空间,所以3.75Gb也是可能的。-1
MaxVT

这就是为什么我说“检查链接的详细信息”:-)
FrankS 2009年

正确。Microsoft列出XP 64位支持高达128GB的RAM
Dan Dascalescu

0

如果您使用集成显卡,那么您可以将其关闭,这意味着系统将能够处理更多的系统RAM。

但是,最好的解决方案绝对是获得x64操作系统。

无论如何也没有理由。大多数程序在x64中运行,XP / Vista / 7具有x86仿真层。它可能是问题的正义驱动因素。


1
Windows XP Pro x64上的x64驱动程序是垃圾,但Vista和7 x64驱动程序已经非常成熟了一段时间。
MDMarra

0

这是一个相当复杂的问题,因为它需要几个组件来解决。那些组件是:

  • 中央处理器
  • 内存控制器单元
  • BIOS /(U)EFI
  • 操作系统
  • 应用

最后一项与问题没有直接关系,但为了完整起见,我添加了它。

简而言之,所有上述组件都必须支持超过4 GB的内存才能成功。

中央处理器

让我们从CPU开始。但首先需要注意的是,CPU根本没有使用任何内存的神奇能力。相反,它只能访问可寻址空间内的任何地址。现在来了一点点的事情。32位CPU能够访问 0到4 GiB范围内的地址。但是,该范围不仅要适应可用的RAM,ROM,SMRAM图形地址重映射表,还要适应所有必需的内存映射I / O. 还有更多,这可能需要这个地址范围的很大一部分。因此,完全可能的是,某些内存地址被这些用途遮蔽,因此无法用于RAM上的操作。为了重新获得隐藏的内存,有必要扩展CPU 可访问的地址空间。如果是32位CPU 物理地址扩展可能会有所帮助。这允许寻址高达64 GiB。默认情况下,以本机64位模式运行的64位CPU可以访问高达16 EiB,这是相当巨大的,不需要这样的技巧。但另一方面,64位CPU使用64位寻址是不切实际的,因此实际上它们仍然受到地址总线的限制,其范围小于16 EiB。

内存控制器单元

最初它位于北桥,但是由AMD开始使用AMD64处理器和英特尔的Nehalem处理器进入处理器芯片。即使具有PAE的CPU能够自己访问 64 GiB,它仍然需要MCU来访问RAM。简单地说:如果请求的地址驻留在RAM中,则访问特定地址的CPU 将从PCI设备,BIOS ROM闪存或MCU获得回复,依此类推。然而,出于营销原因,MCU(在北桥或CPU中)支持比64 GiB 小得多的可寻址空间并不罕见。

BIOS /(U)EFI

BIOS /(U)EFI也很重要,因为它们有责任在任何实际操作之前配置硬件。除此之外,它们还负责将整个处理器可寻址空间映射到硬件设备,总线,RAM等存储器范围。有趣的是,可能会发生整个RAM分裂并映射到几个可用的非连续点。BIOS的问题在于它的开发人员可能不希望系统内RAM使用超过3 GiB,因此BIOS无法正确映射所有要使用的内存。很可能这不会发生在(U)EFI上。

操作系统

操作系统还应支持寻址4个以上的GiB内存。更具体地说,它应配置CPU以使用PAE。一些32位操作系统完全能够使用PAE并访问超过4 GiB,其他操作系统对最大内存有软件限制,即使它们启用PAE以增强安全性(Windows XP就是一个例子)。64位操作系统自然也没有这样的困难,并且通常支持超过4 GiB的内存。

应用

最后一点来自不同的世界,因为应用程序通常在虚拟地址空间中运行,所以为了完整起见,我添加了它。尽管如此,在编译应用程序时需要一些额外的步骤才能使用更多内存。默认情况下,32位应用程序只能使用2 GiB内存。如果操作系统支持并启用了CPU PAE,那么相同的32位应用程序可以处理多达4 GiB的内存。更具体地说,它可以使用最多3 GiB的内存,另一个GiB可以作为公共库和操作系统内核寻址,但不可写(最终这取决于操作系统架构而不是应用程序本身)。同样,64位应用程序本身支持寻址超过4 GiB的内存,并且首先没有这样的麻烦。

为了全面了解这一点,我们考虑几个例子。

考虑使用英特尔®82945G内存控制器。英特尔网站表示,它不支持PAE,并且仅限于4 GB的RAM。让我们9 System Address Map参考数据表的段落。它有很多信息。最有趣的是Figure 9-3. Main Memory Address Range图9-3。 主存储器地址范围 和段落9.2 Main Memory Address Range (1 MB to TOLUD),内容如下:

该地址范围从1 MB扩展到允许(G)MCH(在TOLUD寄存器中编程)可访问的物理存储器的顶部。对该范围内的地址的所有访问都由(G)MCH转发到主存储器,除非它们落入可选的TSEG,可选的ISA Hole或可选的IGD被盗VGA存储器中。(G)MCH提供4 GB的最大主存储器地址解码空间(82945GC / 82945GZ / 82945PL为2 GB)。(G)MCH不重映射APIC或PCI Express存储空间。这意味着,当系统中填充的物理内存量达到4 GB(82945GC / 82945GZ / 82945PL为2 GB)时,将存在物理内存,但仍然是不可寻址的,因此系统无法使用。

正如它所说,由于它不支持PAE,它最终无法重新映射 PCI和每个其他MMIO 超过 4 GiB,因此一些内存将被遮蔽和未使用。这意味着即使它与支持36位寻址的CPU一起使用,高于4 GiB的内存仍然不可用,并且一些接近4 GiB限制的内存也将被闲置。

相反,让我们考虑与前一个相关的英特尔®82955X内存控制器,但它指定支持8 GB与前一个相反!数据表段落2.1 Host Interface Signals建议,它确实使用36位地址总线到CPU,这是一个好兆头。段落 7 System Address Map有进一步的见解。与Figure 7-1. System Address Ranges我们之前看到的相比: 图7-1。 系统地址范围 这清楚地表明它能够利用超过4 GiB的RAM,前提是它与CPU一起使用也能够进行36位寻址。值得注意的是,该段7 System Address Map指出了这一点MCH supports 64 GB of addressable memory space。然而,进一步澄清,最大可用 RAM限制为8 GB。这又一次宣告了可寻址可用,因为我试图在CPU部分传达。

最后,我想指出两个相关的芯片组在内存处理方面实际上存在巨大差异。

让我们检查英特尔®奔腾®处理器至尊版840。它支持64位指令集,但不支持PAE。这意味着如果在32位模式下运行,它将无法使用超过4 GiB的RAM(如果我对这个假设错了,请纠正我)。让我们检查数据表和表格Table 4-3. Signal Description。即使该CPU具有64位功能,它仍然受到36位宽的地址总线的限制,因此将其限制为从0到64 GiB的可访问地址范围。

现在让我们来检查一个更新的CPU。以英特尔®酷睿™i7-7700处理器为例。它被宣传为支持高达64 GB的RAM。现在让我们查看它的数据表。段落2.3 System Address Map使我们相信,由于39位地址总线,该CPU的可寻址范围从0到512 GiB。请注意,对于64位CPU,它仍远离理论上的16 EiB范围。令人惊讶的是,它进一步澄清了这个CPU确实支持最多32 GiB的可用 RAM最大值(与网站上的64 GB相反)。这里还有一个感兴趣的图像Figure 2-2. System Address Range Example图2-2。 系统地址范围示例 它很好地说明了PCI设备等存储器阴影的问题。它也提出了一种通过映射克服这个问题的方法。在CPU 可寻址范围内的实际RAM到高位地址范围的范围。从而回收隐藏的内存以供使用。请注意,此重新映射是在硬件初始化时由BIOS /(U)EFI完成的,正是出于这个原因,我确实在上面的子弹列表中包含了BIOS /(U)EFI。

我以英特尔产品为例,但AMD也是如此。

现在让我们讨论操作系统是如何参与的。Linux内核包括完整的PAE模式支持,从版本2.3.23开始,在32位系统上,Linux内核可以使用超过4 GiB的内存。但是请注意在某些硬件上具有超过4 GiB RAM的系统上32位Linux内核未确定问题(根据我的经验,它与TLB击落有关)。无论如何,维基百科都有关于PAE支持的很好的信息。有趣的是Windows XP仅限于4 GB,而Windows Server 2003 Enterprise / Datacenter SP2则能够达到64 GB。其他Desktop-Server Windows对也是如此。

如您所见,列出的组件之间存在许多组合,在某些情况下,更换CPU或OS可能会有所帮助。处理BIOS /(U)EFI或MCU要困难得多,因为前者是专有的并且内置于系统中并且不易修改,后者内置于CPU中或焊接在板上。


-4

它显示3574MB Ram,因为这是多少RAM是免费的,并且可供计算机随时使用。此图是计算机完全访问的RAM,因为预装在PC上的程序和设置使用一定量的RAM,在您的情况下恰好是426mb。我的6GB 64位PC显示5.8GB可用内存,而不是全部6GB。您最好的选择是考虑升级您的PC


如果3.5 GB是空闲RAM,那么为什么Windows仍然将其划分为空闲RAM并使用RAM?它是一个操作系统,它应该知道所有内容,特别是如果某些东西占用了0.5 GB的内存。安装的程序在启动之前不会占用RAM。
gronostaj 2013年
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.