爲什麼在內存中可以存儲一個字節(8位)&而不是一個位(1位)的最小值? 即使布爾值也被存儲爲字節。我們是否會將最小的數字碰撞到32位或64位,就像CPU上的寄存器一樣?爲什麼可以存儲的最小值是字節(8位)而不是位(1位)?
3
A
回答
1
處理器訪問的底層方法限於最小可用寄存器的大小。在大多數架構中,這個大小是8位。你可以使用這些小部分;例如,C在結構中具有位字段特徵,這允許組合只需要特定位長度的字段。訪問仍然需要讀取整個字節。
一些較老的異國建築確實有不同的「字大小」。在這些機器中,10位可能是通用尺寸。
最後,處理器幾乎總是向後兼容。例如,英特爾從386開始就保持了完整的指令兼容性。如果你爲386編譯的程序,它仍然可以在i7處理器上運行。改變字的大小會破壞兼容性。所以雖然它是可能,但沒有製造商會做到這一點。
2
由於計算機在字節級別尋址內存,所以小於一個字節的內容不可尋址。
5
硬件構建爲以塊(字節,後面的單詞和雙字)讀取數據。這比訪問單個位提供更高的效率,並且還提供了更多的尋址範圍。所以大多數數據至少與字節邊界對齊。存在以位序列而不是字節操作的編碼,但它們非常少見。
無論如何,數據通常與dword(32位)邊界對齊。此外,某些硬件(例如ARM)不能訪問未對齊的多字節變量,即16位字不能「交叉」雙字邊界 - 將引發異常。
相關問題
- 1. 爲什麼1字節等於8位?
- 2. 爲什麼32位等於4Giga字節而不是4吉位
- 3. 字節大小8位或16位?
- 4. 是否可以在位而不是字節中執行memcpy?
- 5. 從8位轉換爲1個字節
- 6. 爲什麼我可以在32位而不是64位編譯這個?
- 7. 爲什麼4位可以存儲0-15範圍內的值?
- 8. 字節= 8位,但爲什麼不BitConverter這麼認爲
- 9. 作爲4位8位字節的半字節,是否有2位或3位的英文單詞?
- 10. 如何在一個字節整數中存儲2位,1位,1位和4位值
- 11. 什麼是Windows 7和8中的孤立存儲位置?
- 12. 什麼是以字節爲單位的base64長度?
- 13. 是0x0F的8位或4位值?
- 14. 帶字節數組和8位整數的模算法:8位=字節%8位
- 15. 什麼是存儲可以按距離查詢的位置的最佳方法?
- 16. 什麼是VH單位的最小/最大值?
- 17. 以字節爲單位的UTF-8字符串大小
- 18. 以字節爲單位存儲文件大小的最佳方法?
- 19. 檢查存儲爲位串的字節是否設置在給定位置
- 20. 我們是否稱第1位或第1位爲第1位?
- 21. 1的補碼 - 是否可以檢測到1位或2位錯誤?怎麼樣?爲什麼?
- 22. 什麼是JSON八位字節,爲什麼需要兩個?
- 23. 8位字節的按位轉置
- 24. 什麼是可寫位圖?
- 25. 什麼是位圖閾值?
- 26. jQuery.css(),那些位置/大小值是什麼單位?
- 27. TFS vs SharePoint:什麼是存儲文檔的最佳位置?
- 28. 什麼是存儲位置信息的最佳數據結構?
- 29. 什麼是可以存儲在MS excel中的最大數目爲2個小數位
- 30. double如何在C++中以8個字節存儲1024位?
儘管無法存儲單個位,但可以使用編譯器優化將多個位/布爾值組合到共享內存空間中。這通常用於位標誌或枚舉。您仍然不會存儲一個位,但可以避免爲8個布爾值存儲8個字節。 – 2011-01-05 18:19:28