为什么存储和传输以字节为单位?

为什么存储和传输以字节为单位?

据我所知,存储设备有 x 个可用于存储的位数。各种软件将以 32 位或 64 位存储二进制代码,一些基本文本文件仅以 8 位 ASCII 存储,而图像、视频、音乐可能介于两者之间。

a) 这种理解正确吗?

b) 如果事物不是 8 位的,为什么要以(8 位)字节为单位来衡量一切?

答案1

当今大多数计算机系统内部都以 8 位的倍数工作。在最低级别,传输的量较少(例如,半字节(4 位)传输到 100 MBit/s 以太网连接的 PHY),但暴露在更高级别的所有内容都是 8 位的倍数。这导致内存以 8 位(或更多)块工作。对于最终用户而言,所有合理测量的最低通用指标是我们今天所说的字节,因此这是选择的单位。

文件中的数据通常与字节边界对齐,因为访问单个位是一项更昂贵的操作。当今大多数计算机指令支持的最小数量是 8 位数据,这就是内存地址指向的数据。因此,文件的某些部分可能是 32 位块或 64 位块,但很少会发现未填充到 8 位的 7 位块(如 7 位 ASCII)。

答案2

是的,你的理解是正确的。

出于各种原因,大小通常以字节为单位指定。一个原因是以位为单位指定数字会导致数字过大,不太方便。另一个原因是小于单个字节的单位几乎从未被传输,因此没有理由使用较小的单位。

答案3

历史上计算机可以使用各种不同的字长。例如,36 位或 40 位字长在早期的电子计算机中并不罕见(这导致了方便的 18 位或 20 位“半字”,这些半字足以满足许多用途,而全长字则可以在需要时提供更大的数量或更高的精度)。

如今,几乎所有通用计算机都以 8 位的 2 的幂倍数来处理数据。8 位是一个方便的基数,并且非常适合“2 的幂”方案,由于其二进制特性,计算机可以轻松处理该方案。

因此,硬件被设计成以一种自我强化的循环方式来处理这种八位数的倍数。

老实说,如今的计算机通常设计为能够高效处理远大于 8 位的数据:通常为 32、64 甚至 128 位。请注意,所有这些都是 8 位的 2 的幂倍数,因此如果需要,可以轻松分解或组合。

在较低层次上,存储容量通常以位来指定,因为有些系统不以字节为单位工作。它也是一个固定数量:八位字适合很多用途,但不是全部,因此虽然字节可能并不适用于每种情况,但可用位数始终保持不变。

作为David Schwartz 指出,向用户显示位数只会夸大数字,而不会提供太多(如果有的话)实际的附加信息。虽然可以期望电子工程师或固件程序员知道如何以位为单位工作,但不能期望普通计算机用户拥有这样的知识。早期的个人计算机还使用编码方案,这些方案始终将单个字符编码为单个字节(或在少数情况下,编码为一些小的字节倍数),因此“字符 = 字节”的概念很容易传达。如今,对于可变长度编码,情况并非如此,例如UTF-8但另一方面,如今的存储容量如此之大,我们通常不需要担心这些细节。

相关内容