Answers:
考虑到高速缓存一致性和NUMA等更新的东西,我不熟悉RAM如何与英特尔CPU配合使用的血腥细节,但从RAM的角度来看,我认为它仍然是8位字节,尽管RAM现在通常安排在可以一次访问多个插槽的通道。因此,一次抓取4个字节(假设4个插槽)将花费与在这样的系统上抓取1个字节相同的时间量。然而,RAM接受来自存储器控制器的地址作为输入,并将其作为输出AFAIK返回8位。
“单词”大小可能意味着不同的东西。我记得第一次遇到这个学习68000汇编语言的术语 - 在我正在阅读的文中,“byte”表示8位,“word”表示16位,“word-aligned”表示地址落在16位边界上。我知道术语“单词”之前用于引入68000(1980?),并且在早期可能与“字节”同义。
CPU“更喜欢”处理的“本机”数据与其架构的“位数”及其运行模式相匹配.32位CPU(或不是“长模式”的64位CPU)具有32位位寄存器,一组将RAM(4字节)中的值加载到这些寄存器和其他stuf中的指令。但是对于Intel,32位寄存器(如EAX)也可以作为两个寄存器AH(EAX的高16位)和AL(低16位)进行寻址,并且有无数的MOV指令将RAM中的内容加载到EAX中, AH,AL,并从那里回到RAM。我现在懒得看看英特尔程序员的参考指南,但我认为有指令将单个字节加载到AH或AL的高8位或低8位。 (我知道MIPS有这样的指示)。但是我认为有更多的指令适用于所有32位,如果你想使用更少的位,你就会受到影响,因为你必须首先将stuf移动到临时寄存器等等。
因此,在英特尔和16位时代以来制造的大多数其他通用CPU中,您在处理内存方面非常灵活。但是,指令可能更适合在架构的“位数”中工作。
计算机体系结构中的“单词”通常是最小的可寻址存储单元。传统上,这与机器的通用寄存器大小相同。然而,自从字节寻址变得流行(我们可能可以归功于IBM System / 360,以及小型机上的PDP-11,为此)这个概念已经被稀释了。
就CPU架构定义的内存寻址而言 - 也就是说,程序员如何看待机器 - x86 / x64上不存在“word”概念,除非您将其视为字节的同义词。字节的地址也是从该字节开始的任何较大区域的地址。我们当然可以在寄存器和RAM之间一次移动一个,两个,四个或(在x64上)八个字节 - 或者更多,内存到内存,使用REP指令 - 但我们断言的地址仍然是一个字节。我们可以对所有这些大小的单词进行算术运算。
如果考虑寄存器,通常假定机器的“字大小”与其通用寄存器的“字大小”相同。这将是x86上的32位,x64上的64位。在大多数体系结构中,GPR大小是整数的大小,CPU可以使用单个指令执行简单的算术运算。
在平台(主板,RAM模块和芯片等)方面,RAM以64位块的形式进行处理 - 我想你可以称之为单词。您可以在早期的处理器上清楚地看到这一点,这些处理器具有用于地址和数据的单独引脚:最低有效地址引脚称为A3,而不是A0!物理地址位A0,A1和A2永远不会离开处理器。但程序员从未见过这样的地址。
最后,还有“缓存行”的概念。高速缓存行是物理上连续的RAM块,占用L1 / L2 / L3高速缓存中的一个条目。一段时间以来,Intel / AMD世界中的缓存行已经是64字节宽。因此,当您访问当前不在缓存中的内存地址时,CPU将获取 八 那些8字节的RAM块。换句话说,存储在高速缓存中的地址省略了低位6位。也许一个字 在缓存中 真的是64字节或512位! (但是绕过高速缓存的存储器访问仍然一次只能读取或写入8个字节;在由存储器映射的I / O设备解码的物理地址范围中,单个字节可以是可寻址的;这取决于总线。)
在Microsoft C派生的编程环境中,“字”是16位 - 早在Microsoft之前就已经这样了,并且数据类型的名称和定义已经转移到32位和64位环境以实现兼容性。 “双字”(或“长字”的DWORD或LONG,这个术语在VAX上是常见的)是32位。 64位整数在体系结构中称为“四字”,但通常在C中具有更多特定名称,如UINT64(64位整数,无符号)。
因此,这取决于您在系统中的位置以及您正在查看的内容。我们通常不会考虑所有这些日子的“字大小”,而是“GPR大小”。