爲什麼在內存中可以存儲一個字節(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. 爲什麼我可以在32位而不是64位編譯這個?
- 4. 字節= 8位,但爲什麼不BitConverter這麼認爲
- 5. 作爲4位8位字節的半字節,是否有2位或3位的英文單詞?
- 6. 如何在一個字節整數中存儲2位,1位,1位和4位值
- 7. 什麼是存儲可以按距離查詢的位置的最佳方法?
- 8. 什麼是VH單位的最小/最大值?
- 9. 以字節爲單位的UTF-8字符串大小
- 10. 以字節爲單位存儲文件大小的最佳方法?
- 11. 檢查存儲爲位串的字節是否設置在給定位置
- 12. 8位字節的按位轉置
- 13. 1的補碼 - 是否可以檢測到1位或2位錯誤?怎麼樣?爲什麼?
- 14. 什麼是JSON八位字節,爲什麼需要兩個?
- 15. double如何在C++中以8個字節存儲1024位?
- 16. 以字節爲單位的RSA簽名的大小是多少?
- 17. TFS vs SharePoint:什麼是存儲文檔的最佳位置?
- 18. 如何將4個2位值合併爲1個8位值?
- 19. 爲什麼使用位交錯來配對數字,而不是通過高位和低位來分隔數字?
- 20. atmega32是8位還是16位?
- 21. 什麼是保存1位深度TIF的最佳網頁可見格式?
- 22. CLR是否在「自然」大小的位置存儲小值?
- 23. 商店形象的.resx爲字節[],而不是位圖
- 24. 如果2^32bits = 4Billion位而不是字節,32位地址是4GB?
- 25. 什麼是8位愚人節的Google MapTypeId?
- 26. 爲什麼打印的值是25?不應該是一個內存位置值?
- 27. 爲什麼使用十六進制值而不是普通的10位數字?
- 28. (ASM)「設置位1」是什麼意思?
- 29. 什麼是復位(手柄,1)?
- 30. 什麼是「單位」?
儘管無法存儲單個位,但可以使用編譯器優化將多個位/布爾值組合到共享內存空間中。這通常用於位標誌或枚舉。您仍然不會存儲一個位,但可以避免爲8個布爾值存儲8個字節。 – 2011-01-05 18:19:28