指令集架構(ISA)

32 位元與 64 位元

32 位元與 64 位元指的是一個 ISA 中基本數字、以及最重要的記憶體位址有多寬。把位址想成那排記憶體信箱上各寫的編號:用 32 位元位址,你能寫到 2^32 的編號,所以能命名約 40 億個不同的位元組(4 GB);用 64 位元位址,上限躍升到 2^64,一個大得驚人的範圍。位元數首先是指:機器能直接指向多少個不同的記憶體位置。

具體來說,一個 64 位元 ISA 有 64 位元暫存器與 64 位元程式計數器,並構成 64 位元位址,所以它能一次管理遠超過 4 GB 的記憶體——這是桌機與伺服器轉向 64 位元的實際原因。它也讓單一暫存器能裝下更大的整數(可達 2^64 個值,而非 2^32)。RISC-V 有寬度變體:RV32(32 位元)給小型嵌入式晶片、RV64(64 位元)給手機、筆電與伺服器;指令看起來幾乎相同,但暫存器與位址寬度不同。x86 也有同樣的區分(舊的 32 位元模式對上今日 64 位元的「x86-64」)。

兩個誠實的澄清能化解常見的混淆。第一,「64 位元」主要關乎位址空間(與整數寬度),不是原始速度——一顆 64 位元晶片並不會自動「快上一倍」;對於從不需要大位址或大整數的程式碼,好處可能很小。第二,更寬並非免費:64 位元指標占用 32 位元指標兩倍的記憶體,所以充滿指標的資料結構會變大、更難裝進快取。轉向 64 位元是被「可用記憶體撞上 4 GB 牆」所驅動,不是出於對更大數字的單純渴望。

一個 32 位元位址最多能命名 2^32 個位元組,約 4 GB——所以一台 32 位元機器根本無法使用 16 GB 的記憶體。64 位元位址移除了那道天花板,這正是為什麼任何記憶體超過 4 GB 的電腦都跑 64 位元 ISA。

位元寬度主要關乎你能定址多少記憶體,不是原始速度。

更多位元不會自動更快。64 位元主要換來更大的位址空間與更寬的整數;它也讓指標大上一倍,可能損及快取使用。驅動因素是 4 GB 的記憶體牆,不是對大數字的渴望。

又稱
word sizeaddress width32-bit vs 64-bit字組大小位元數