计算机系统解密:从理解计算机到编写高效代码
上QQ阅读APP看书,第一时间看更新

1.9 命名位组

计算机不只是一个含有一堆毫无规则组织的位容器。设计计算机的人出于对成本的考虑,必须决定位的数量和组织方式。就像数字表示法一样,人们尝试过很多方法,但只有一些方法留存了下来。

位是很小的单位,所以把它们组合成更大的数据块。例如,霍尼韦尔6000系列的计算机使用36位数据块作为基本组织形式,并允许将这些数据块分割成18位、9位以及6位数据块,或组合成72位数据块。第一款商用小型计算机DEC PDP-8(1965年推出)使用的是12位数据块。随着时间的推移,世界上已经确定8位数据块为基本单位,称为字节

为了方便使用,不同大小的数据块有不同的名称。表1-10总结了现在一些常用数据块的名称和大小。

表1-10 位组的名称

你可能会疑惑,为什么有半字、长字和双字,却没有普通字?用来描述特定计算机设计中事物的真实大小。真实大小指的是可以被快速操作的最大数据块的大小。例如,虽然DEC PDP-11可以访问字节、半字、长字,但它的内部组织结构为16位,因此DEC PDP-11的真实大小为16位。C和C++等编程语言允许将变量声明为int(整数的简称),这使它们的大小成为真实大小。你还可以使用一组受支持的特定大小来声明变量。

有一些标准的术语,可以方便地指代大数。曾经有一个指代大数的标准,现在又换了一个新的标准。工程师们有一个习惯,就是找一些和他们想要的意思相近的词,然后把这些词当作他们想要的意思来使用。例如,在公制中,千(kilo)是千级单位,兆(mega)是百万级单位,吉(giga)是十亿级单位,而太(tera)是万亿单位。这些名词被借用过来,稍稍改变,因为在计算机中使用的是底数2,而不是底数10。然而,当我们在计算中提到千位或千字节(K或KB)时,实际上并不是指1 000。我们指的是二进制中最接近1 000的数,也就是1 024或210。同理,兆字节(M或MB)是220,吉字节(G或GB)是230,太字节(T或TB)是240

但有时我们确实指的是底数为10的版本。你需要了解语境,才能知道采用哪种含义。传统上,底数为10的版本常用来表示磁盘驱动器的大小。一位美国律师假装不知道这点,提起诉讼(Safier诉WDC),声称磁盘驱动器的内存比宣传的要小。(在我看来,这就像那些声称2×4的木材实际尺寸不是2英寸乘4英寸[1]一样愚蠢,因为这个尺寸一直都是指未刨光未加工的木材尺寸。)这场诉讼导致了新的IEC标准前缀的产生:kibi(KiB)表示210,mebi(MiB)表示220,gibi(GiB)表示230,tebi(TiB)表示240。这样的表示慢慢地流行了起来。

术语字符经常与字节互换使用(将在下一节介绍),因为字符的代码通常被设计成适应字节。现在,随着对非英语语言的更好支持,经常需要涉及多字节字符。


[1]1英寸=0.025 4米。——编辑注