Memory 为什么可以存储的最小值是一个字节(8位)&;一点也不?

Memory 为什么可以存储的最小值是一个字节(8位)&;一点也不?,memory,byte,cpu,bit,Memory,Byte,Cpu,Bit,为什么存储在内存中的最小值是一个字节(8位)而不是一个位(1位)? 甚至布尔值也存储为字节。我们是否会像CPU上的寄存器一样,将最小的数字增加到32或64位 编辑:澄清许多答案似乎对探索的性质感到困惑。这个问题是关于为什么一个字节不是7位、1位、32位等(而不是为什么低位原语必须在最小值时放入硬件的字节)。8位字节仅仅是历史数据,例如某些硬件有10位字节。或者说,对于一般处理来说,8位是理想的,而10位是理想的,这有数学上的原因吗?因为计算机在字节级别寻址内存,所以任何小于一个字节的东西都不可寻

为什么存储在内存中的最小值是一个字节(8位)而不是一个位(1位)? 甚至布尔值也存储为字节。我们是否会像CPU上的寄存器一样,将最小的数字增加到32或64位


编辑:澄清许多答案似乎对探索的性质感到困惑。这个问题是关于为什么一个字节不是7位、1位、32位等(而不是为什么低位原语必须在最小值时放入硬件的字节)。8位字节仅仅是历史数据,例如某些硬件有10位字节。或者说,对于一般处理来说,8位是理想的,而10位是理想的,这有数学上的原因吗?

因为计算机在字节级别寻址内存,所以任何小于一个字节的东西都不可寻址。

硬件是为读取块(字节、后面的字和DWORD)中的数据而构建的。这比访问单个位提供了更高的效率,还提供了更大的寻址范围。因此,大多数数据至少与字节边界对齐。存在使用位序列而不是字节操作的编码,但它们非常罕见


如今,数据通常与dword(32位)边界对齐。此外,某些硬件(例如ARM)无法访问未对齐的多字节变量,即16位字无法“跨越”dword边界-将引发异常

处理器访问的基本方法仅限于最小可用寄存器的大小。在大多数架构上,该大小为8位。你可以使用这些小部分;例如,C在结构中具有位字段特性,允许组合只需要特定位长度的字段。访问仍然需要读取整个字节

一些古老的异国情调的架构实际上有不同的“字大小”。在这些机器中,10位可能是常见的大小


最后,处理器几乎总是向后兼容的。例如,英特尔从386以后一直保持着完全的指令兼容性。如果您使用为386编译的程序,它仍将在i7处理器上运行。更改字号会破坏兼容性。因此,尽管这是可能的,但没有一家制造商会这么做。

假设我们的母语是由两个字符组成的,比如a、b 为了区分两个字符,我们至少需要1位,例如0代表字符a,1代表字符b


因此,如果我们计算字符和特殊字符和符号的数量,有128个字符,为了区分一个字符和另一个字符,需要log2(128)=7位和第8位进行传输

虽然不能存储一个位,但可以使用编译器优化将多个位/布尔值组合到共享内存空间中。这通常用于位标志或枚举。您仍然不会存储单个位,但可以避免为8个布尔值存储8个字节。这并不是不以比1字节小的单位存储布尔值或小于128的值的理由,它只涉及文本传输。问题是为什么8位字节与7位、1位、32位字节等的比较