我不明白爲什麼一個單詞總是包含2的冪的字節。爲什麼它不能包含5個字節或6個字節?爲什麼內存中的單詞總是包含2^n個字節?
回答
這並非總是如此。過去已經有12位(PDP-8)18位(PDP-7)36位(PDP-10)或甚至60位(CDC 6600)的機器有12位奇數尺寸的機器。 Microchip的PIC 16xxxx系列存儲14位字,而24xxxx系列使用24位指令。然而,這些是專用的嵌入式芯片,而不是通用機器。
雖然大多數情況下,事情轉移到了兩個冪。對此的一大推動是舊的IBM 360,其引入了現在熟悉的(如果有些過時的)包含4個8位字節的32位字。
這種兩個字大小的冪和每個字兩個字節的冪的組合使得整數/指針和字符的尋址簡單且高效。
現代機器已經簡單地將其更新爲64位字,每個字8個八位字節,保留了這個有用的優點。
你提到的任何這些例子都有字節尋址的內存嗎?如果存儲器只能進行字尋址,則地址計算不必按字中的位數或字中的八位字節數進行縮放。 (例如,該機器可能只有一個12位內存總線?) –
當時大多數機器都是字地址機器。然而,PDP-10可能將一個字分成6個6位「字節」或5個7位字,浪費比特或4個8比特字節,4個浪費比特或4個9比特字節。用於執行此操作的特殊說明,由程序員處理字邊界和其他尋址問題。實際上,只要它們適合於36位字,該單詞可以細分爲任意數量的可變位字段。 –
嗯,所以我想如果你想要一個字符串中的第N個字符,你必須除以某個非2的冪來得到包含你正在尋找的字符的字地址:/ I would一直認爲單詞可尋址內存大多會避免不得不通過非功耗2因素進行擴展,但可能不適用於試圖高效使用內存的軟件。 –
- 1. pcap爲什麼總是8個字節的數據包...爲什麼?
- 2. 這個內存地址包含什麼?
- 3. 爲什麼字節尋址內存而不是4字節尋址內存?
- 4. 包含數字的單詞
- 5. 爲什麼我的untar不包含最後一個字節
- 6. 測試一個單詞是否僅包含指定的音節
- 7. 內存中的第一個字節是什麼?
- 8. 爲什麼double總是8個字節,int總是4個字節,即使int有更多的數字?
- 9. xDebug:var_dump中包含的數字是什麼?
- 10. 爲什麼空文本文件包含3個字節?
- 11. 包含`javascript`單詞的Wordpress網址 - 未打開。爲什麼?
- 12. 一個簡單包含mixin的類的名字是什麼?
- 13. 爲什麼map任務總是在單個節點
- 14. 爲什麼neo4j總是有單個節點?
- 15. 包含多個單詞的內容類型字段顯示爲多個方面
- 16. 爲什麼這個time_zone_ptr示例不包含內存泄漏?
- 17. 爲什麼一個簡單的PHP包含文件是脆弱
- 18. 爲什麼Java char原語佔用2個字節的內存?
- 19. 爲什麼包含公式的單元格在其中包含字符串?
- 20. TCP數據包:這些額外字節的含義是什麼?
- 21. 正則表達式獲得字符串中的單詞出現,但不包含包含該單詞的單詞
- 22. 爲什麼nacl sdk包含如此多的0字節文件?
- 23. 爲什麼argv [1]是整個單詞而不是單個字母?
- 24. 爲什麼不在包含js文件時總是使用https?
- 25. UNIX - 爲什麼$#不包含命令(因此總是> = 1)?
- 26. 爲什麼sizeof(13.33)是8個字節?
- 27. 爲什麼我的包含實體並未包含在內?
- 28. 如何創建不包含單詞中包含的前一個字母的單詞?
- 29. 爲什麼malloc分配的內存大小是(24 + 16n)個字節?
- 30. 包含unicode字符的分詞包含的字詞
易於計算地址,功率爲2意味着簡單的位移就足以計算字節地址等。 –
在某些體系結構中有一些指令可以加載或存儲非2的冪次數的大小。例如x87的內部80位浮動格式可以通過特殊版本的[FLD](http://www.felixcloutier.com/x86/FLD.html)和[FSTP](http://www.felixcloutier)加載/保存。 COM/86/FST:FSTP.html)。 x86內存 - 在32位模式下間接遠程跳轉加載2 + 4字節。但是這些都是例外,而不是規則,因爲Isu說。 –