Linux
最大程序大小在哪裡指定?
我有一台記憶體為 1TB 的 RHEL4 機器,發現 malloc 和 mmap 拒絕分配任何超過 512GB 的記憶體。同時,我似乎對 RHEL5 機器沒有問題。那麼,我假設這只是核心配置的問題。有誰知道是什麼控制最大程序大小(假設頁面大小固定)?
amd64的Linux 初始移植只支持 40 位的虛擬地址空間,分為 512GB 用於程序和 512GB 用於核心。目前版本支持 48 位虛擬地址空間,分為 128TB/128TB。最後一個限制在目前版本的 amd64 架構中是固有的:根本無法配置MMU以使更多位有效。請參閱Linux 如何在 x86-64 中支持超過 512GB 的虛擬地址範圍?有關 amd64 MMU 的說明,或AMD64 Architecture Programmer’s Manual (§5.1) 的完整故事。
我不知道這個限制是什麼時候改變的,但是你的 2.6.9 核心真的很舊。Red Hat 發布了RHEL 3 到 RHEL 6 的特性和限製表。RHEL4 上每個程序的最大地址空間為 512GB。RHEL5 將為您提供 2TB,但您可能希望直接升級到支持完整 128TB 的 RHEL6。