
指標儲存的是記憶體位址,因此其大小就是記憶體位址的大小,而記憶體位址的大小取決於記憶體位置的數量。另一方面,字大小是指令可以工作的最大單位,因此記憶體位置的大小無關緊要,因為一次可以收集多個記憶體位置。那麼字長和指針大小有什麼關係呢?
答案1
它們不必相同,而且不存在它們的電腦系統的數量遠遠多於存在它們的電腦系統的數量。儘管如此,指針大小和“字”大小之間仍然存在一些關係。
程式執行大量指針算術。數組下標就是指標加法。指針相互比較。如果您的 CPU 無法對指標大小的內容進行算術運算,則必須將位址拆分為多個變量,從而產生分段或分組的位址空間。這些管理起來很複雜,並且會導致類別指標類型(近指標、遠指標、基底指標)的激增。因此,您會受到其他奇怪的限制,例如連結清單能夠比數組容納更多的項目。
儘管如此,具有 8 位元資料匯流排和更大位址空間(可能僅用於程式碼而不是資料)的微控制器仍然很常見。另一方面,具有 32 位元或 64 位元指標的現代通用 CPU 具有比指標更寬的資料字(例如,現代 x86_64 CPU 的 AVX 子系統中的 512 位元資料字)。許多無鎖演算法依賴於對資料的原子訪問,這些資料至少是指標大小的兩倍。
答案2
TLDR:可能是巧合。
指標本身並不是電腦體系結構的一部分,它是一種程式語言功能。例如,Windows API 定義了自己的指標類型以及它們的大小。在 Windows 上的 C 中,指向 char ( char*
) 的指標在 32 位元和 64 位元之間變化,具體取決於您的版本。單字的大小可能與它關係不大。
單字這是一個非常重載的詞,咳咳,術語。在CPU架構中,一個字可以指指令的大小、資料匯流排、記憶體匯流排等。視窗應用程式介面一個單字是一個無符號短整型,即至少2 個字節,因此取決於 Shorts 的實作方式。
MS 字和指令大小字之間可能存在相關性,但我認為您需要作業系統開發人員對此進行辯論,並且我懷疑它會影響指標的大小。
答案3
電腦暫存器和內部匯流排一度從 4 位元發展到 8 位,然後是 16 位、32 位,目前是 64 位。最大位址空間取決於指標的大小(儘管一些早期的CPU,例如Z80A,可能頁記憶體區塊大小為指標)。
隨著總線變得越來越寬,也需要增加 RAM,因此指針的大小也隨之增加。但有時作業系統無法跟上更大的總線,例如在從 Windows 7 32 位元到 64 位元的過渡中,最大可尋址 RAM 首先從 4 GB 增加到 8 GB,最後在高階版本上增加到 192 GB。
因此,暫存器和匯流排的大小(從半字節到字節,然後是字,然後是 MS 16 位元作業系統中的雙字)任意增加,位址空間也是如此。@DarkDust 提供了更完整的解釋。