cpu怎样读取数据?

mousestuman 2014-04-13 07:05:39
假设定义了一个4字节整型变量,按其存储地址的不同可能有下列几种读取方式:

1.如果变量在自然对齐位置上,则只要一次就可以取出数据。

2.如果首地址为0x00000002,则CPU如果取它的值的话需要访问两次内存,第一次取从0x00000002-0x00000003的一个short,第二次取从0x00000004-0x00000005的一个short然后组合得到所要的数据。

3.如果变量在0x00000003地址上的话则要访问三次内存,第一次为char,第二次为short,第三次为char,然后组合得到整型数据。

那么请问cpu(i386)到底以什么样的方式读取数据呢?为什么有时候能读取4字节,有时候却只能2字节或1字节?
...全文
693 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mousestuman 2014-04-16
  • 打赏
  • 举报
回复
我当然知道会提高效率,我想知道他是如何提高效率的,他的理论基础是什么
FeelTouch Labs 2014-04-16
  • 打赏
  • 举报
回复
1)提高存取效率;2)节省存储空间 不是一定必须对齐的
引用 7 楼 mousestuman 的回复:
原文在这里http://blog.csdn.net/21aspnet/article/details/6729724 我就是看字节对齐才问这个问题的,我就想知道为什么需要字节对齐
mousestuman 2014-04-16
  • 打赏
  • 举报
回复
原文在这里http://blog.csdn.net/21aspnet/article/details/6729724 我就是看字节对齐才问这个问题的,我就想知道为什么需要字节对齐
lm_whales 2014-04-15
  • 打赏
  • 举报
回复
在对齐地址,不用Cache的话 ,一个周期可以读取内存中的数据,不过问题是,由于 从DRAM,SDRAM,DDR,DD2,DDR3..etc内存是动态RAM,而不是静态RAM。 第一次读数据比较慢,批量读取比较快。 非对齐数据,需要可能两个周期读写,第一个周期。发出前一部分的地址,后一周期,发第二个数据的地址 由于CPU低位地址,不再采用地址线设置地址, 而是用体信号来识别每个字节的;8体CPU,一次可以读取8个字节,16体一次可以读取16字节。 当启用Cache的时候,各体同时读取,所以其实区别不大,影响很小的。 不对齐的缺陷是,CPU流水线不能迅速更新,因为需要两个读写周期才能读写一个数据,不论是直接读写内存,还是读写Cache。
赵4老师 2014-04-14
  • 打赏
  • 举报
回复
搜“The Intel 64 and IA-32 Architectures Software Developer's Manual”
tang_cheng 2014-04-14
  • 打赏
  • 举报
回复
i386是32bit的CPU,所以其从总线取数据的话一定是按照4byte对齐的方式获得。从你的描述看上去,貌似是一个16bit的CPU的数据读取方式,但是16bit的CPU是不可能一次性获得32bit的数据的。所以这其中应该有所误会,能否把你描述的原文帖一下先?
lpcads 2014-04-14
  • 打赏
  • 举报
回复
引用 2 楼 buyong 的回复:
CPU是通过cache读取的,你这个读法是哪来?
8086 BHE
buyong 2014-04-13
  • 打赏
  • 举报
回复
CPU是通过cache读取的,你这个读法是哪来?
xiangshuaijiayo 2014-04-13
  • 打赏
  • 举报
回复
因为存在内存对齐机制,只要一次就能读出数据

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧