2016-12-12 57 views
1

我不明白爲什麼一個單詞總是包含2的冪的字節。爲什麼它不能包含5個字節或6個字節?爲什麼內存中的單詞總是包含2^n個字節?

+1

易於計算地址,功率爲2意味着簡單的位移就足以計算字節地址等。 –

+0

在某些體系結構中有一些指令可以加載或存儲非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說。 –

回答

2

這並非總是如此。過去已經有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個八位字節,保留了這個有用的優點。

+0

你提到的任何這些例子都有字節尋址的內存嗎?如果存儲器只能進行字尋址,則地址計算不必按字中的位數或字中的八位字節數進行縮放。 (例如,該機器可能只有一個12位內存總線?) –

+0

當時大多數機器都是字地址機器。然而,PDP-10可能將一個字分成6個6位「字節」或5個7位字,浪費比特或4個8比特字節,4個浪費比特或4個9比特字節。用於執行此操作的特殊說明,由程序員處理字邊界和其他尋址問題。實際上,只要它們適合於36位字,該單詞可以細分爲任意數量的可變位字段。 –

+0

嗯,所以我想如果你想要一個字符串中的第N個字符,你必須除以某個非2的冪來得到包含你正在尋找的字符的字地址:/ I would一直認爲單詞可尋址內存大多會避免不得不通過非功耗2因素進行擴展,但可能不適用於試圖高效使用內存的軟件。 –

相關問題