2009-10-19 86 views
8

为什么计算机具有字节寻址存储器,而不是4字节寻址存储器(或64位的8字节寻址存储器)?是的,我看到它有时会有用,它看起来不雅而过度。这些优势是否具有实质性,还是仅仅因为遗产?为什么字节寻址内存而不是4字节寻址内存?

+0

基本上:为什么把一个比萨饼切成8片?等一下,你把你的比萨切成16片!?!? – 2009-10-19 04:51:45

回答

6

处理器实际上访问内存的数量为64位(x86自从奔腾左右以来); 64位处理器通常具有128位总线。另外,在访问主内存时,你有突发填充整个缓存行,这是更大的单位内存。

这只是基于字节的寻址;这增加了很少的开销,并且根本没有过多。

今天,您绝对需要基于字节的网络协议寻址。使用基于字的寻址来实现TCP会很困难:如果您收到17字节的内容,您希望read()返回什么内容?同样,更高层是基于字节的:如果以4字节为单位显示“GET/HTTP/1.0”之类的请求行,HTTP实现起来相当困难。你基本上不得不将这些单词拆分成字节,并用shift操作等等(现在处理器用硬件实现,这要归功于基于字节的寻址)。

+0

在一个字地址CPU上,网卡可以将每个网络八位字节存储在一个机器字中(反之亦然)。或者,对于将4个字节打包为32位字(比如Alpha AXP,在早期版本中没有字节加载/字节存储指令)的更可能的情况,您的TCP示例将返回17,并且将取决于软件用移位来处理最后一个单词中的填充。(Alpha是字节寻址的,但它只支持对齐的32位或64位字加载/存储,并有一些用于I/O地址空间的黑客。http://www.tldp.org/HOWTO/Alpha-HOWTO- 8.html) – 2017-10-13 03:20:03

+0

Alpha稍后添加了字节加载/存储,但它确实支持TCP(使用普通PCI网卡,AFAIK),而没有它们。这使得它实际上是一个字寻址机器,但是64位地址的低位被忽略(或要求为0?)而不是不存在。 – 2017-10-13 03:22:02

7

重要的历史原因 - 它已成为CPU理解的标准。 Here是它很好的讨论:

通常,尺寸必须被选择到 便于数据和 机器指令。 8位(256 值)足以容纳 英文中的常用字符以及其他一些 其他语言。 8位 处理器的设计者推测发现 能够编码256个公共指令 ,因为一个字节是“合理的 折衷”。并且此时,8位也通常足以编码诸如像素颜色或 屏幕坐标之类的其他东西。拥有2的幂的字节大小 也可能具有被认为是“整洁”设计的 。它 有趣的是注意到,对于 例如,Marxer的,E。(1974),数据处理元素 ,描述了字节 为是6位,并且根据计算机是否是的 8位 “八进制”或“十六进制”类型。

当然,其他尺寸在早期使用。

0

我们需要在标准化上规模一些。人们根据上面Shane提到的理由选择了8位大小。自那时以来,我们坚持使用字节可寻址内存。现在由于各种兼容性问题以及OPCODES只是一个字节长的事实而无法改变。但是使用技巧,内存很容易进行字寻址来获取/存储数据/地址!