计算机中的“字长”是什么意思?

74
我尝试理解“word”的含义,查看了维基百科,但是定义模糊不清。所以我的问题是,“word size”是什么意思?它是数据总线长度、地址总线长度还是其他什么?

1
可能是字长和数据总线的重复问题。 - Ken White
2
这篇来自Andy Glew的CompArch维基(已经下线一段时间了)的内存粒度术语不完整的描述可能会略有帮助。 - user2467198
1
可能有语法错误的问题标题 - MisterGeeky
5个回答

79

"字长"是指计算机CPU在一次处理中处理的位数(现今通常为32位或64位)。数据总线大小、指令大小和地址大小通常是字长的倍数。

为了向后兼容,微软Windows API定义了WORD为16位,DWORD为32位,QWORD为64位,而不考虑处理器。


10
WORD=16位是英特尔的术语,现代x86 CPU从8086发展而来,其中寄存器宽度和总线宽度真正为16位。386添加了32位模式,但没有移除16位模式,因此英特尔通过坚持8086的定义来保持事物的合理性。例如,AVX512BW添加了操作8位(B)和16位(W)元素的SIMD指令。这只是术语上的一个小问题,而不是一个主要的头痛问题(例如,如果相同的汇编指令在不同的模式下具有不同的含义)。 - Peter Cordes
3
为什么它被称为“word”,而不是“letter”?有任何想法吗? - asterite
1
@asterite: 我认为命名背后的类比是字节就像字母,而一个由多个字母组成的单词。(当处理字符串时,一个字节通常确实只能容纳一个字符,所以这个类比的部分是正确的。一些早期计算机(和现代DSP)只有字地址内存,但可能仍然将多个字符打包到每个字中。) - Peter Cordes

13
考虑以下内容:
CPU(处理器)、RAM(主存储器)、I/O 设备(鼠标、键盘、打印机)和总线(数据传输组件)。
您希望这些计算机零件如何通信和传输数据? 您肯定需要一个固定大小的位来被视为单个数据单位。
为此,计算机科学家们同意将此单位标准化为32位或64位(取决于制造商的选择)。
他们给这个单位命名,并称其为Word。
因此,一 Word 只是一个数据单元(一堆位(0和1的信号电荷)),它从一个计算机组件移动到另一个计算机组件。
例如,总线是用32位(4字节)或64位(8字节)构建的。同样,CPU(硬件)和操作系统(软件)也是使用32位或64位构建的。
只是碰巧成为了标准单位,称为Word,并且大小为32位或64位。
附:Word 是计算机内部移动的许多数据大小单位之一,不同的计算机组件使用不同的大小来传输数据(表示0和1的信号电荷),例如 RAM 可以使用64位的大小,而总线可以使用32位。 硬件设计人员设计组件的架构时会考虑这些大小差异,以在仅在 CPU 上实现32位的 Word 大小但在 RAM 上实现64位的 Word 大小,或者在所有组件上实现相同的大小等。 Word 的大小曾经是8位(1字节),但现在大多数计算机组件(如 CPU 或 RAM、总线等)的最常见单位大小为64位。

2
像USB主控制器这样的I/O设备并不需要具有与CPU字长相同的I/O寄存器宽度。一个字节是基本单位;而且在64位体系结构中,字长甚至不是寄存器宽度。例如,在64位MIPS上,“dadd”是64位加法的指令。或者在现代x86 CPU中,数据在比整数寄存器更宽的总线上内部移动,例如在Haswell/Skylake中L1d和L2之间的64字节(完整缓存行)路径:缓存如何变得如此快? - Peter Cordes
2
现代几乎所有的CPU都本地支持单字节存储(1990年代初期的DEC Alpha是最近的主流例外)。请参见Can modern x86 hardware not store a single byte to memory?。因此,即使在CPU和内存之间,对于未缓存的存储,传输大小也不严格固定于字大小或总线宽度。 - Peter Cordes
1
我觉得你误解了我的回答。OP 问的是计算机中的“Word”含义,我用简单易懂的英语解释了它的含义和应用方式,但我从未说过所有组件都实现了相同大小的“Word”。当然,某些组件可能会使用不同的大小,这取决于它们的设计方式。 但感谢你提供有关不同组件使用单位数据大小的信息。 我已经添加了一个“Ps”注释来阐明我的观点,并使读者清楚地理解它。 - Fouad Boukredine
1
我仍然认为这不是一个好的解释。它让“字长”听起来比它实际重要得多。除了只有字寻址内存的计算机之外,你的PS以外的一切都暗示着一个字是不同组件之间的基本数据单元,但这正是字节的作用。(除了只有字寻址内存的计算机之外)。在现代计算中,“字长”是一个相当模糊的术语,但通常与CPU的寄存器宽度相关。知道计算机的字长并不能告诉你太多信息;你必须了解细节才能知道它对于特定架构意味着什么! - Peter Cordes
2
你可能已经知道了一些,这里为初学者进行了简化。但是过于简化的答案会给人留下错误的印象,认为字词非常重要,从而导致错误的想法,比如 uint8_t 对于所有用途都本质上很慢。更好的做法是说这个术语有点含糊不清。 - Peter Cordes
显示剩余4条评论

11

答案是——现在的意义不如以前那么大了。很久以前,计算机只能加载/存储完整的“字”内存,这些字每个都是16/24/32/36/48位(取决于特定计算机)。人们必须仔细地围绕目标计算机的字大小设计其程序。

但是,现在的计算机可以访问单独的字节或数十个字节长的数据字符串,并进行相对无缝的操作。比技术上的字大小更重要的是内存总线宽度,它确定了在一个内存“周期”中CPU和内存之间可以传输多少字节。

因此,“字大小”有点毫无意义,而且(正如另一个答案所建议的那样),像Microsoft这样的公司通常会以任意的方式定义它,与任何事物都没有真正关系。


现在这更多是寄存器大小的反映,但即使加入了SIMD寄存器也有些模糊... - twalberg
@twalberg - 是的,你有半个、单个和双倍寄存器,还有浮点寄存器。这还没有接近SIMD。 - Hot Licks

6

字长指微处理器作为单位处理数据的比特数。


2

Word 是一组比特,作为微处理器处理的单个数据单元。然而,它可以是任何设定值,常见的设定值包括:16、18、24、32、36、40、48和64。

类比:
在英语中,单词是语音或书写中的一个单独的、有意义的元素,与其他单词一起用于构成句子。


1
不,字节是您可以单独加载或存储的最小数据单位。大多数计算机具有字节可寻址内存,并支持字节加载/存储以及字加载/存储。请参见Can modern x86 hardware not store a single byte to memory? 了解更多关于所有x86和几乎所有现代CPU本地支持字节存储的详细信息,而不是通过包含对齐字的读取-修改-写入来模拟它们。主要例外是可能仅支持字操作的DSP。 - Peter Cordes
1
在某些CPU上,一个字是你可以处理的最大数据单元,但并非所有CPU都是如此。这不是一个明确定义的术语。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接