32/64 位元機器(處理器)中 RAM 的字大小是多少

32/64 位元機器(處理器)中 RAM 的字大小是多少

32/64 位元機器(處理器)中 RAM 的字大小是多少?

這個問題快把我逼瘋了。在像英特爾酷睿 i5 微處理器這樣的 64 位元機器中,RAM 本身保存資料的字的大小到底是多少?

另外,保存資料的字長是否從 32 位元變成 64 位元?

答案1

傳統上,電腦體系結構中的「字」通常是最小的可尋址記憶體單元。傳統上,這與機器的通用暫存器大小相同。

然而,自從字節尋址變得流行以來,這個概念就被淡化了。 (我們或許可以將此歸功於 IBM System/360 以及小型主機方面的 PDP-11。)

就 CPU 架構定義的記憶體定址(即程式設計師如何看待機器)而言,x86/x64 上不存在「字」概念,除非您將其視為位元組的同義詞。記憶體的每個位元組都有自己的位址,而且位元組的位址也是從該位元組開始的任何更大區域的位址(擴展到更高編號的位址)。當然,我們可以使用 REP 指令在暫存器和 RAM 之間一次移動 1、2、4 或(在 x64 上)8 個位元組 - 或者更多,記憶體到記憶體 - 但我們斷言的位址仍然是一個位元組。我們可以對所有這些大小的單字進行算術。 (和別的。)

如果您從暫存器的角度考慮,通常會假設機器的「字長」與其通用暫存器的「字長」相同。這在 x86 上是 32 位,在 x64 上是 64 位。在大多數架構上,GPR 大小是 CPU 可以使用單一指令執行簡單算術的最大整數的大小。

現在讓我們引入更多混亂......!

就平台(主機板、RAM 模組和晶片等)而言,在所有使用Intel 和AMD“商品”CPU 和晶片組的機器上,RAM 都是以64 位元塊來尋址的- 我想你可以稱它們為單字。您可以在具有單獨的位址和資料引腳的早期處理器上非常清楚地看到這一點:最低有效位址引腳稱為 A3,而不是 A0!實體位址位 A0、A1 和 A2 永遠不會離開處理器。但程式設計師永遠不會看到這樣的地址。

最後,還有「快取線」的概念。高速緩存行是實體上連續的 RAM 區塊,佔用 L1/L2/L3 快取中的一個條目。 Intel/AMD 世界中的快取行寬度為 64 位元組已經有一段時間了。因此,當您存取目前不在快取中的記憶體位址時,CPU 會獲取這些 8 位元組 RAM 塊。換句話說,快取中儲存的位址省略了低六位元。所以也許一句話在快取中實際上是 64 位元組或 512 位元! (但是繞過快取的記憶體存取一次仍然只能讀取或寫入8 個位元組;在記憶體映射I/O 裝置解碼的實體位址範圍中,單一位元組可能是可尋址的;這取決於總線。

在 Microsoft C 衍生的程式設計環境中,「字」是 16 位元 - 早在 Microsoft 之前就已經如此,並且資料類型的名稱和定義已繼承到 32 位元和 64 位元環境以實現相容性。 “雙字”(或 DWORD 或 LONG,表示“長字”,該術語在 VAX 上很常見)是 32 位元。 64 位元整數在架構中稱為“四字”,但在 C 中通常有更具體的名稱,例如 UINT64(64 位元整數,無符號)。

因此,這取決於您在系統中的位置以及您正在查看的內容。現在我們通常不會考慮“字長”,而是考慮“GPR 大小”。

答案2

我不熟悉RAM 如何與Intel CPU 配合使用的具體細節,因為有了諸如緩存一致性和NUMA 之類的新內容,但從RAM 的角度來看,我相信它仍然是8 位元字節,儘管RAM 現在通常排列在可以同時存取多個插槽的通道。因此,在此類系統上,一次抓取 4 個位元組(假設有 4 個槽)所需的時間與抓取 1 個位元組所需的時間相同。儘管如此,RAM 仍然接受來自記憶體控制器的位址作為輸入,並返回 8 位元作為輸出 AFAIK。

「單字」的大小可以表示不同的意思。我記得在學習68000 彙編語言時第一次遇到這個術語- 在我正在閱讀的文本中,“字節”表示8 位,“字”表示16 位,“字對齊”表示位於16 位邊界上的地址。我知道“字”一詞在 68000(1980 年?)推出之前就已經使用過,並且在更早的時期可能是“字節”的同義詞。

CPU「偏好」處理的「本機」資料與其架構的「位數」及其運作模式相符。 RAM(4 位元組)中的值載入到這些暫存器和其他內容中的指令。但在 Intel 中,EAX 等 32 位元暫存器也可以作為兩個暫存器 AH(EAX 的高 16 位元)和 AL(低 16 位元)來尋址,並且有無數的 MOV 指令將內容從 RAM 載入到 EAX 中,啊,AL,然後從那裡回到RAM。我現在懶得看英特爾程式設計師參考指南,但我認為有指令將單一位元組載入到 AH 或 AL 的高或低 8 位元。 (我知道 MIPS 有類似的說明)。但我認為有更多的指令適用於所有 32 位,如果您想使用更少的位,您的效率會受到影響,因為您必須先將內容移至臨時暫存器等。

因此,在 Intel 和自 16 位元時代以來製造的大多數其他通用 CPU 中,您對記憶體尋址的方式非常靈活。不過,指令可能會更優化以適應架構的「位數」。

相關內容