Memory 为什么内存中的一个字总是包含2^n个字节?

Memory 为什么内存中的一个字总是包含2^n个字节?,memory,cpu-architecture,Memory,Cpu Architecture,我不明白为什么一个单词总是包含2次方的字节。为什么它不能包含5个字节或6个字节?情况并非总是如此。过去有些机器有12位(PDP-8)、18位(PDP-7)、36位(PDP-10)甚至60位(CDC6600) 即使在今天,也有一些大小不一的机器。Microchip的PIC16XXXX系列使用14位字存储指令,而24xxxx系列使用24位指令。然而,这些是专门的嵌入式芯片,而不是通用机器 不过,在很大程度上,事情发展到了二的幂。这方面的一大推动因素是旧的IBM360,它引入了现在熟悉的(如果有点过时

我不明白为什么一个单词总是包含2次方的字节。为什么它不能包含5个字节或6个字节?

情况并非总是如此。过去有些机器有12位(PDP-8)、18位(PDP-7)、36位(PDP-10)甚至60位(CDC6600)

即使在今天,也有一些大小不一的机器。Microchip的PIC16XXXX系列使用14位字存储指令,而24xxxx系列使用24位指令。然而,这些是专门的嵌入式芯片,而不是通用机器

不过,在很大程度上,事情发展到了二的幂。这方面的一大推动因素是旧的IBM360,它引入了现在熟悉的(如果有点过时的话)32位字,其中包含4个8位字节

两个字大小的幂和每个字两个字节数的幂的组合使得整数/指针和字符的寻址简单而高效


现代机器只是简单地将其更新为64位字,每个字8个8位字节,保留了这一有用的优势。

地址计算简单,2的幂意味着简单的位移位就足以计算字节地址等。有些体系结构上有一些指令加载或存储非2的幂。e、 g.x87的内部80位浮点格式可通过特殊版本的和加载/存储。32位模式下x86内存间接远跳加载2+4字节。但这些都是例外,而不是规则,原因是智能开关单元所说的。你提到的这些例子中有没有字节可寻址内存?如果内存只有字可寻址,那么地址计算就不必按字中的位数或字中的八位字节数进行缩放。(例如,机器可能只有12位内存总线?)当时的大多数机器都有字地址机器。然而,PDP-10可以将一个字分成6个6位“字节”或5个7位“字节”和4个8位字节和4个浪费位或4个9位字节。专门的指令用于执行此操作,由程序员处理单词边界和其他寻址问题。事实上,这个词可以细分为任意数量的可变位字段,只要它们适合36位的词。嗯,我想如果你想要字符串中的第n个字符,您必须将N除以一些非2次幂才能得到包含您要查找的字符的单词地址:/我一直认为单词可寻址内存将基本上避免按非2次幂因子进行缩放,但对于试图有效利用内存的软件来说可能不行。是的,为了找到一个角色,你必须做大量的数学运算。我在PIC24xxx系列中也遇到过类似的问题,它在24位内存中放置字符串而不浪费每三个字节。