为什么在内存中可以存储一个字节(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