2011-01-05 59 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位字不能“交叉”双字边界 - 将引发异常。

相关问题