64bit

64位程序可以消耗的最大記憶體是多少?

  • September 28, 2011

我知道有 2^48 位的硬體容量,並且我知道核心通常對應用程序記憶體限制沒有很多本機限制,但是應用程序可以使用記憶體的上限嗎?除了 2^48 之外,一般會消耗,因為這是 DIMM 插槽上可用的通道數?

作為參考,Redmond 在大多數伺服器產品上將其產品限制在 ~2TB。

根據定義(至少,按照通用定義),一個 64 位程序只能看到 2個 64字節的記憶體。實際上,大多數作業系統將每個程序限制在比可用地址空間小一點的範圍內,這樣核心就可以操作 64 位值,這些值可以是指向核心記憶體、程序記憶體或設備記憶體的指針。4EB 或 8EB 限制很常見。

在此之前,您可能會遇到與架構相關的限制。特別是,程序的記憶體映射必須適合機器的MMU,而硬體往往只有必要的位數。MMU 帶有多達四個級別的頁表,Linux(以及其他)可以支持所有四個級別:PGD(頁面全域目錄)列出 PUD(頁面上層目錄)列出 PMD(頁面中級目錄)列出 PTE(頁表條目)。由於每個間接級別都是對大多數指針取消引用的多一步,因此 systems . 頁面大小通常為 4kB (2 1242可定址字節,但是大多數 64 位體系結構可以配置為更大的頁表,因此很難對您可以達到多高的問題給出任何一般性的答案。

請注意,每個程序的地址限制與機器中可以有多少物理記憶體無關。例如,PC 中 DIMM 插槽上可用的通道數是您可以在該 PC 中擁有多少 RAM 的理論限制(儘管 CPU 記憶體匯流排的寬度通常是限制因素)。它與程序可以消耗多少記憶體或多少地址空間無關(記憶體可以換出,或在NUMA多處理器機器的多個節點之間共享)。

引用自:https://unix.stackexchange.com/questions/21485