在具有 4 GB RAM 的筆記型電腦上,我認為內存地址應該從 byte 開始0
並在之前結束0x1_0000_0000
(_ 是為了清楚起見而添加的分隔符),但 MemTest86 說它以 結束0x1_6060_0000
,但這不是多了1542 MB 嗎?
同樣,在具有 16 GB RAM 的桌上型電腦上,我認為它應該以 結尾0x4_0000_0000
,但 MemTest86 說0x4_2F60_0000
,它大了 758 MB。
為什麼 MemTest86 顯示的位址空間大於實際實體記憶體量?
答案1
這是現代系統上非常常見的情況。這是有充分理由的。
幾十年前,電腦就擁有了記憶體映射硬體設備。這是一種特殊的硬件,CPU 可以像記憶體一樣存取它。這用於與視訊系統等硬體設備進行快速通訊。如果沒有這台計算機將會遭受嚴重的效能損失。
為了與 32 位元作業系統相容,此記憶體映射硬體必須出現在底部 4 GB 位址範圍。在現代系統中,這意味著至少數百 MB,這是相當重要的。由於記憶體映射硬體和 RAM 不能存在於同一位址,因此相當一部分 RAM 將無法存取。這就是 32 位元版本的 Windows 無法看到全部 4 GB RAM 的原因。
這不是一個好情況。但至少對於那些可以處理它的作業系統來說,有一個解決方案。解決方案是將無法存取的 RAM 部分重新映射到 4 GB 以上的位址。這就是你所看到的。為了 32 位元作業系統的利益,將在 4 GB 以下的位址處保留盡可能多的 RAM。
這種記憶體重新映射是由電腦硬體和 BIOS 完成的,因此可用於任何作業系統。現代 64 位元作業系統和記憶體測試程式就是為此而設計的。由於技術原因,32 位元用戶端版本的 Windows 將忽略所有高於 4 GB 的記憶體。對於現代作業系統,應用程式永遠看不到實體 RAM 位址,因此它們不關心記憶體映射。