2011-01-05 62 views
3

爲什麼在內存中可以存儲一個字節(8位)&而不是一個位(1位)的最小值? 即使布爾值也被存儲爲字節。我們是否會將最小的數字碰撞到32位或64位,就像CPU上的寄存器一樣?爲什麼可以存儲的最小值是字節(8位)而不是位(1位)?

+2

儘管無法存儲單個位,但可以使用編譯器優化將多個位/布爾值組合到共享內存空間中。這通常用於位標誌或枚舉。您仍然不會存儲一個位,但可以避免爲8個布爾值存儲8個字節。 – 2011-01-05 18:19:28

回答

1

處理器訪問的底層方法限於最小可用寄存器的大小。在大多數架構中,這個大小是8位。你可以使用這些小部分;例如,C在結構中具有位字段特徵,這允許組合只需要特定位長度的字段。訪問仍然需要讀取整個字節。

一些較老的異國建築確實有不同的「字大小」。在這些機器中,10位可能是通用尺寸。

最後,處理器幾乎總是向後兼容。例如,英特爾從386開始就保持了完整的指令兼容性。如果你爲386編譯的程序,它仍然可以在i7處理器上運行。改變字的大小會破壞兼容性。所以雖然它可能,但沒有製造商會做到這一點。

2

由於計算機在字節級別尋址內存,所以小於一個字節的內容不可尋址。

5

硬件構建爲以塊(字節,後面的單詞和雙字)讀取數據。這比訪問單個位提供更高的效率,並且還提供了更多的尋址範圍。所以大多數數據至少與字節邊界對齊。存在以位序列而不是字節操作的編碼,但它們非常少見。

無論如何,數據通常與dword(32位)邊界對齊。此外,某些硬件(例如ARM)不能訪問未對齊的多字節變量,即16位字不能「交叉」雙字邊界 - 將引發異常。

相關問題