为什么计算机具有字节寻址存储器,而不是4字节寻址存储器(或64位的8字节寻址存储器)?是的,我看到它有时会有用,它看起来不雅而过度。这些优势是否具有实质性,还是仅仅因为遗产?为什么字节寻址内存而不是4字节寻址内存?
回答
处理器实际上做访问内存的数量为64位(x86自从奔腾左右以来); 64位处理器通常具有128位总线。另外,在访问主内存时,你有突发填充整个缓存行,这是更大的单位内存。
这只是基于字节的寻址;这增加了很少的开销,并且根本没有过多。
今天,您绝对需要基于字节的网络协议寻址。使用基于字的寻址来实现TCP会很困难:如果您收到17字节的内容,您希望read()返回什么内容?同样,更高层是基于字节的:如果以4字节为单位显示“GET/HTTP/1.0”之类的请求行,HTTP实现起来相当困难。你基本上不得不将这些单词拆分成字节,并用shift操作等等(现在处理器用硬件实现,这要归功于基于字节的寻址)。
在一个字地址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
Alpha稍后添加了字节加载/存储,但它确实支持TCP(使用普通PCI网卡,AFAIK),而没有它们。这使得它实际上是一个字寻址机器,但是64位地址的低位被忽略(或要求为0?)而不是不存在。 – 2017-10-13 03:22:02
重要的历史原因 - 它已成为CPU理解的标准。 Here是它很好的讨论:
通常,尺寸必须被选择到 便于数据和 机器指令。 8位(256 值)足以容纳 英文中的常用字符以及其他一些 其他语言。 8位 处理器的设计者推测发现 能够编码256个公共指令 ,因为一个字节是“合理的 折衷”。并且此时,8位也通常足以编码诸如像素颜色或 屏幕坐标之类的其他东西。拥有2的幂的字节大小 也可能具有被认为是“整洁”设计的 。它 有趣的是注意到,对于 例如,Marxer的,E。(1974),数据处理元素 ,描述了字节 为是6位,并且根据计算机是否是的 8位 “八进制”或“十六进制”类型。
当然,其他尺寸在早期使用。
我们需要在标准化上规模一些。人们根据上面Shane提到的理由选择了8位大小。自那时以来,我们坚持使用字节可寻址内存。现在由于各种兼容性问题以及OPCODES只是一个字节长的事实而无法改变。但是使用技巧,内存很容易进行字寻址来获取/存储数据/地址!
- 1. 字节寻址内存(数据对齐)
- 2. 内存寻址
- 3. 直接映射缓存字节寻址
- 4. 字寻址和字节寻址的区别
- 5. 为什么4个内存地址需要一个int变量-4个字节 - 如果一个内存地址是4个字节?
- 6. PyCUDA内存寻址:内存偏移量?
- 7. 学习C - 指针和内存寻址
- 8. 关于寻址内存,GDT的粒度位有什么变化?
- 9. 为什么linux的IPv4地址需要16个字节而不是4个
- 10. 为什么MongoId不是12字节长,而是24字节?
- 11. 内容寻址网络
- 12. 寻找字节码
- 13. 为什么sizeof()返回4个字节而不是2个字节的short int?
- 14. 字大小限制内存地址的数量,而不是内存本身?
- 15. 当最大内存不通电时,计算机如何处理内存寻址?
- 16. 寄存器间接寻址
- 17. 虚拟内存的最大可寻址空间是多少?
- 18. 为c结构数组寻址和分配内存
- 19. 如何把一个HASH字节的内存地址与OllyDbg的
- 20. 打印内存地址,而不是字符串值
- 21. “内存是8字节对齐”是什么意思?
- 22. 什么使用,而不是postDelayed,以节省内存
- 23. 字节地址存储器和字地址
- 24. 为什么GDB中的一些内存地址比其他内存地址短?
- 25. 为什么32位等于4Giga字节而不是4吉位
- 26. 在现代计算机中如何实现字节寻址?
- 27. 需要多少位来寻址32个字节?
- 28. 为什么返回值是内存地址而不是Java中的实际值?
- 29. 为什么打算32位寻址
- 30. 内存流转换为字节
基本上:为什么把一个比萨饼切成8片?等一下,你把你的比萨切成16片!?!? – 2009-10-19 04:51:45