2009-10-19 44 views
8

爲什麼計算機具有字節尋址存儲器,而不是4字節尋址存儲器(或64位的8字節尋址存儲器)?是的,我看到它有時會有用,它看起來不雅而過度。這些優勢是否具有實質性,還是僅僅因爲遺產?爲什麼字節尋址內存而不是4字節尋址內存?

+0

基本上:爲什麼把一個比薩餅切成8片?等一下,你把你的比薩切成16片!?!? – 2009-10-19 04:51:45

回答

6

處理器實際上訪問內存的數量爲64位(x86自從奔騰左右以來); 64位處理器通常具有128位總線。另外,在訪問主內存時,你有突發填充整個緩存行,這是更大的單位內存。

這只是基於字節的尋址;這增加了很少的開銷,並且根本沒有過多。

今天,您絕對需要基於字節的網絡協議尋址。使用基於字的尋址來實現TCP會很困難:如果您收到17字節的內容,您希望read()返回什麼內容?同樣,更高層是基於字節的:如果以4字節爲單位顯示「GET/HTTP/1.0」之類的請求行,HTTP實現起來相當困難。你基本上不得不將這些單詞拆分成字節,並用shift操作等等(現在處理器用硬件實現,這要歸功於基於字節的尋址)。

+0

在一個字地址CPU上,網卡可以將每個網絡八位字節存儲在一個機器字中(反之亦然)。或者,對於將4個字節打包爲32位字(比如Alpha AXP,在早期版本中沒有字節加載/字節存儲指令)的更可能的情況,您的TCP示例將返回17,並且將取決於軟件用移位來處理最後一個單詞中的填充。(Alpha是字節尋址的,但它只支持對齊的32位或64位字加載/存儲,並有一些用於I/O地址空間的黑客。http://www.tldp.org/HOWTO/Alpha-HOWTO- 8.html) – 2017-10-13 03:20:03

+0

Alpha稍後添加了字節加載/存儲,但它確實支持TCP(使用普通PCI網卡,AFAIK),而沒有它們。這使得它實際上是一個字尋址機器,但是64位地址的低位被忽略(或要求爲0?)而不是不存在。 – 2017-10-13 03:22:02

7

重要的歷史原因 - 它已成爲CPU理解的標準。 Here是它很好的討論:

通常,尺寸必須被選擇到 便於數據和 機器指令。 8位(256 值)足以容納 英文中的常用字符以及其他一些 其他語言。 8位 處理器的設計者推測發現 能夠編碼256個公共指令 ,因爲一個字節是「合理的 折衷」。並且此時,8位也通常足以編碼諸如像素顏色或 屏幕座標之類的其他東西。擁有2的冪的字節大小 也可能具有被認爲是「整潔」設計的 。它 有趣的是注意到,對於 例如,Marxer的,E。(1974),數據處理元素 ,描述了字節 爲是6位,並且根據計算機是否是的 8位 「八進制」或「十六進制」類型。

當然,其他尺寸在早期使用。

0

我們需要在標準化上規模一些。人們根據上面Shane提到的理由選擇了8位大小。自那時以來,我們堅持使用字節可尋址內存。現在由於各種兼容性問題以及OPCODES只是一個字節長的事實而無法改變。但是使用技巧,內存很容易進行字尋址來獲取/存儲數據/地址!