題 為什麼Windows只顯示我的4 GB RAM大約3.5 GB?


我最近將計算機的RAM升級到4 GB。我的32位Windows安裝僅顯示3574 MB的內存。如何讓Windows使用全部RAM?


88
2017-08-21 10:38


起源


這只是今天早上回答的 superuser.com/questions/27006/... - Tom
這需要像2000票一樣被提升,因為我似乎每天遇到另一個人問“我的記憶在哪裡?”微軟應該從對話框中取出它。 。 。 - surfasb
伙計,你需要64位操作系統。說真的,現在開始存錢。如果你的系統實際上支持你可以在主板上填充的所有內存,那麼這個問題將成為一個沒有實際意義的問題。 - Fiasco Labs
在系統單元周圍小心地感受潮濕或潮濕。這可能是“內存洩漏”。 - EleventhDoctor
@ala:因為內核內存分裂...(由內核分配1Gb)。看來你已經在使用/ 3gb開關...... - user2284570


答案:


你不能:

看到 伙計,我的4 GB內存在哪裡?

如果你想將內存和設備放入32位地址範圍:並不是所有可用的4GB地址空間都可以放到內存中。
  那麼,如果你出去為你的PC購買4GB內存,會發生什麼?
  IO的內存映射中有一個漏洞。 (現在它只佔總地址空間的25%,但它仍然是一個很大的漏洞。)因此,你的內存底部3GB將可用,但最後1GB存在問題。

唯一可行的解​​決方案是安裝64位操作系統。在Windows Vista和更高版本中,32位和64位許可證密鑰可以互換。如果您可以獲得64位版本操作系統的Windows安裝介質,則可以使用原始許可證密鑰重新安裝。


70
2017-08-21 10:40



我不明白 - 是不是2 ^ 32 4千兆字節? - Matt
啊,沒關係,實際上閱讀了鏈接的文章 - Matt
很高興知道這一點 - LiuYan 刘研
@VonC:那怎麼樣 這個? - user2284570
@ user2284570是的,PAE可以提供幫助,但是誰還在使用WXp? ;) - VonC


首先,Windows XP(32位)僅支持4 GB。這不僅適用於Windows XP。相反,它適用於 32位桌面Windows  - 具有PAE和許多32位Windows Server版本的32位Linux系統每個鏈接文章支持超過4GB。如果您使用的是32位Windows XP,則永遠不會看到超過4 GB。但是,我確實找到了一個更詳細的原因,為什麼你的系統顯示的可用內存少於實際安裝的ram。

3GB-not-4GB RAM問題 (微軟MSDN博客):

由於很久以前做出的架構決策,如果您安裝了4GB的物理RAM,Windows只能報告部分物理4GB內存(範圍從~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中“系統信息”對話框中報告的系統內存少於預期


8
2017-08-29 04:20



微軟文件 這裡 如果底層架構是64位,則Windows XP支持高達128GB的RAM。你能否更新你的答案? - Dan Dascalescu
@SgtOJ:那怎麼樣 這個? - user2284570
@SgtOJ:4 GB RAM限制不適用於“所有32位操作系統”。完全支持PAE的32位操作系統(如Windows Server 2003)可以愉快地使用4 GB以上的RAM。 “32位”限制虛擬地址空間,而不是物理空間。 - Jamie Hanrahan
@JamieHanrahan表示單個程序仍然無法使用超過4GB。我認為他的意思是IO預留開銷與操作系統無關。 - jiggunjer
@jiggunjer我在評論的問題或答案中沒有任何地方說它或暗示被問到的是“單個程序”可以使用什麼。 I / O保留也不是嚴格操作系統獨立的。 - Jamie Hanrahan


如果您使用的是32位Windows XP,則無法實現。由於沒有足夠的地址空間可用於使用額外的RAM

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


3
2017-08-21 10:43



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


正如其他人所說,這是不可能的。

說明:

每塊內存都有一個地址。操作系統指定地址的長度。對於較舊的操作系統,地址長度為32位,僅允許2 ^ 32(4 294 967 296)個地址。現在,看看這個數字,看起來您的操作系統應該支持4 GB,但是具有內部存儲器的所有其他硬件(最重要的是視頻卡中的視頻RAM)也會映射到該地址空間。

這就像你試圖分發1,200,000個六位數的電話號碼。


3
2017-08-21 10:56



你正在混淆RAM和地址空間。 - 0xC0000022L
@ 0xC0000022L:不,他不是。他在談論物理地址空間,而RAM必須映射為可用。 - Ben Voigt
@BenVoigt:那怎麼樣 這個? - user2284570
如果編寫了所有內核代碼來使用它,那麼PAE很棒。不幸的是,許多內核代碼是由第三方編寫的驅動程序,這些驅動程序幾乎無法通過平坦的內存模型獲得穩定的東西。啟用PAE需要使用平面模型假設丟棄所有現有驅動程序。這就是Windows服務器啟用PAE而客戶端不支持的原因。看史蒂夫的答案。 - Ben Voigt
@BenVoigt:自1997年以來,假設內存<4GB的驅動程序很少見,因為所有WDM驅動程序都可以安裝在Windows 2000/2003上...... - user2284570


舊主板僅支持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 :-)


3
2017-09-24 09:51



如果將/ PAE開關添加到boot.ini,Windows XP SP1支持> 4GB的RAM - user2284570


如果您想使用完整的4GB,唯一的選擇是升級到64位操作系統:

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

普通的Windows XP只有32位,這將內存限制在最大3.5gb。查看VonC發布的鏈接,了解有關此主題的詳細信息。


0
2017-08-21 10:51



32位不會將內存限制在3.5Gb max。這是其他設備佔用可用的地址空間,所以3.75Gb也是可能的。 -1 - MaxVT
這就是為什麼我說“檢查鏈接的詳細信息”:-) - FrankS
正確。微軟列出了這一點 XP 64位支持高達128GB的RAM。 - Dan Dascalescu


如果您使用集成顯卡,那麼您可以將其關閉,這意味著系統將能夠處理更多的系統RAM。

但是,最好的解決方案絕對是獲得x64操作系統。

無論如何也沒有理由。大多數程序使用x64,XP / Vista / 7具有x86仿真層。它只是司機 威力 是問題。


0
2017-08-21 11:35



Windows XP Pro x64上的x64驅動程序是垃圾,但Vista和7 x64驅動程序已經非常成熟了一段時間。 - MDMarra


這是一個相當複雜的問題,因為它需要幾個組件來解決。 這些組件是:

  • 中央處理器
  • 內存控制器單元
  • 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。簡單地說:一個CPU 訪問 如果請求的地址駐留在RAM中,則特定地址從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的內存。

應用

最後一點來自不同的世界,因為應用程序通常以a 虛擬地址空間,為了完整起見,我添加了它。儘管如此,在編譯應用程序時需要一些額外的步驟才能使用更多內存。默認情況下,32位應用程序只能使用2 GiB內存。相同的32位應用程序可以 地址 高達4 GiB的內存,前提是操作系統支持並啟用了CPU PAE。更具體地說,它可以 使用 最多3 GiB的內存,另一個GiB可以作為公共庫和操作系統內核尋址,但不可寫(最終這取決於操作系統架構而不是應用程序本身)。同樣,64位應用程序本身支持尋址超過4 GiB的內存,並且首先沒有這樣的麻煩。

為了全面了解這一點,我們考慮幾個例子。

考慮 英特爾82945G內存控制器。英特爾網站表示,它不支持PAE,並且僅限於4 GB的RAM。讓我們參考段落 9 System Address Map 數據表。它有很多信息。最有趣的是 Figure 9-3. Main Memory Address RangeFigure 9-3. Main Memory Address Range 和段落 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的最大主存儲器地址解碼空間(2 GB用於   82945GC / 82945GZ / 82945PL)。 (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 對於我們之前看到的那個: Figure 7-1. System Address Ranges 這清楚地表明它能夠使用超過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 說服我們這個CPU的 尋址 由於39位地址總線,範圍從0到512 GiB。請注意,對於64位CPU,它仍遠離理論上的16 EiB範圍。令人驚訝的是,它進一步澄清了這個CPU確實支持最多32 GiB 可用 RAM最大值(與網站上的64 GB相反)。這裡還有一個感興趣的圖像 Figure 2-2. System Address Range ExampleFigure 2-2. System Address Range Example 它很好地說明了PCI設備等存儲器陰影的問題。它還提出了一種克服這個問題的方法 製圖 從CPU中的實際RAM到高位地址範圍的範圍尋址 範圍。從而回收隱藏的內存以供使用。請注意,此重新映射是在硬件初始化時由BIOS /(U)EFI完成的,正是出於這個原因,我確實在上面的子彈列表中包含了BIOS /(U)EFI。

我以英特爾產品為例,但AMD也是如此。

現在讓我們討論操作系統是如何參與的。 Linux內核包括從版本2.3.23開始的完整PAE模式支持,並且完全可以擁有超過4 GiB的內存 可用 在32位系統上使用Linux內核。但要注意一個 某些硬件上具有超過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中或焊接在板上。


0
2017-10-17 20:43





它顯示3574MB Ram,因為這是多少RAM是免費的,並且可供計算機隨時使用。此圖是計算機完全訪問的RAM,因為預安裝到PC上的程序和設置使用一定量的RAM,在您的情況下恰好是426mb。我的6GB 64位PC顯示5.8GB可用內存,而不是全部6GB。您最好的選擇是考慮升級您的PC


-4
2017-07-02 13:24



如果3.5 GB是免費RAM,那麼為什麼Windows仍然將其劃分為空閒RAM並使用RAM?它是一個操作系統,應該知道所有內容,特別是如果某些東西耗盡了0.5 GB的內存。安裝的程序在啟動之前不會佔用RAM。 - gronostaj