爲什麼計算機具有字節尋址存儲器,而不是4字節尋址存儲器(或64位的8字節尋址存儲器)?是的,我看到它有時會有用,它看起來不雅而過度。這些優勢是否具有實質性,還是僅僅因爲遺產?爲什麼字節尋址內存而不是4字節尋址內存?
回答
處理器實際上做訪問內存的數量爲64位(x86自從奔騰左右以來); 64位處理器通常具有128位總線。另外,在訪問主內存時,你有突發填充整個緩存行,這是更大的單位內存。
這只是基於字節的尋址;這增加了很少的開銷,並且根本沒有過多。
今天,您絕對需要基於字節的網絡協議尋址。使用基於字的尋址來實現TCP會很困難:如果您收到17字節的內容,您希望read()返回什麼內容?同樣,更高層是基於字節的:如果以4字節爲單位顯示「GET/HTTP/1.0」之類的請求行,HTTP實現起來相當困難。你基本上不得不將這些單詞拆分成字節,並用shift操作等等(現在處理器用硬件實現,這要歸功於基於字節的尋址)。
在一個字地址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
Alpha稍後添加了字節加載/存儲,但它確實支持TCP(使用普通PCI網卡,AFAIK),而沒有它們。這使得它實際上是一個字尋址機器,但是64位地址的低位被忽略(或要求爲0?)而不是不存在。 – 2017-10-13 03:22:02
重要的歷史原因 - 它已成爲CPU理解的標準。 Here是它很好的討論:
通常,尺寸必須被選擇到 便於數據和 機器指令。 8位(256 值)足以容納 英文中的常用字符以及其他一些 其他語言。 8位 處理器的設計者推測發現 能夠編碼256個公共指令 ,因爲一個字節是「合理的 折衷」。並且此時,8位也通常足以編碼諸如像素顏色或 屏幕座標之類的其他東西。擁有2的冪的字節大小 也可能具有被認爲是「整潔」設計的 。它 有趣的是注意到,對於 例如,Marxer的,E。(1974),數據處理元素 ,描述了字節 爲是6位,並且根據計算機是否是的 8位 「八進制」或「十六進制」類型。
當然,其他尺寸在早期使用。
我們需要在標準化上規模一些。人們根據上面Shane提到的理由選擇了8位大小。自那時以來,我們堅持使用字節可尋址內存。現在由於各種兼容性問題以及OPCODES只是一個字節長的事實而無法改變。但是使用技巧,內存很容易進行字尋址來獲取/存儲數據/地址!
- 1. 字節尋址內存(數據對齊)
- 2. 4千字節內存中有多少個可尋址位?
- 3. 字節/字尋址
- 4. 內存尋址
- 5. 什麼是統一尋址內存?
- 6. 直接映射緩存字節尋址
- 7. MIPS可以字節尋址
- 8. 字尋址和字節尋址的區別
- 9. PyCUDA內存尋址:內存偏移量?
- 10. 爲什麼4個內存地址需要一個int變量-4個字節 - 如果一個內存地址是4個字節?
- 11. 從內存地址獲取字節?
- 12. 學習C - 指針和內存尋址
- 13. MIPS彙編中的內存尋址
- 14. 關於尋址內存,GDT的粒度位有什麼變化?
- 15. 爲什麼這個緩衝區指向不可尋址的字節?
- 16. 爲什麼linux的IPv4地址需要16個字節而不是4個
- 17. C/C++:如何獲得一個地址尋址的字節數
- 18. 在32位尋址的字節尋址空間中,引用8位需要32位存儲空間?
- 19. 爲什麼地圖值不可尋址?
- 20. 爲什麼MongoId不是12字節長,而是24字節?
- 21. 內容尋址網絡
- 22. 尋找字節碼
- 23. 「......的字節分配內存不足」是什麼意思? (Android)
- 24. 爲什麼sizeof()返回4個字節而不是2個字節的short int?
- 25. 爲什麼雙對齊到8字節邊界,而不是4個字節
- 26. 寄存器間接尋址
- 27. 當最大內存不通電時,計算機如何處理內存尋址?
- 28. 文字的內存地址
- 29. 字大小限制內存地址的數量,而不是內存本身?
- 30. 虛擬內存的最大可尋址空間是多少?
基本上:爲什麼把一個比薩餅切成8片?等一下,你把你的比薩切成16片!?!? – 2009-10-19 04:51:45