为什么数据对齐能够减少访存次数?

dream_fish 2002-07-22 10:03:54
为什么数据对齐能够减少访存次数?
...全文
28 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeffzhang 2002-07-22
读读下面的:

数据对齐是cpu结构的一部分,当cpu访问正确对齐的数据是,它的运行效率最高.当数据大小的模数的内存地址是0,数据是对齐的.例如,WORD值应该总是从被2除尽的地址开始,而DWORD值应该总是从被4除尽的地址开始.当CPU试图杜去的数据值没有正确对齐时,CPU可执行两种操作之一.产生一个异常条件或者执行多次对齐的内存访问,以便读取完整的未对齐数据值.如果CPU执行多次内存访问,应用程序的运行速度就会变慢.最好情况下,系统访问未对齐数据所需要的时间试访问对齐数据时间的2倍,在有些情况下,时间更长.为了使应用程序获得最佳的运行性能,编写的代码必须使数据正确的对齐.x86 CPU的EFLAGS寄存器中包含一个特殊的位标志,称作AC(对齐检查)标志.按照默认设置,当CPU首次加电时,该标志设置为0.当该标志为0时,CPU能够自动执行她应该执行的操作,以便成功地访问未对齐的数据值.如果该标志被设置为1,每当系统试图访问未对齐的数据时,CPU就会发出一个INT 17H.x86的Windows2000和Windows98版本从来不改变这个cpu标志位,所以,这些os应用程序在x86处理器上运行时,你根本看不到应用程序中出现数据未对齐的异常.在Alpha CPU上,她不自动处理未对齐数据的访问,当未对齐数据访问发生时,cpu会将这一情况通知操作系统.这是,Windows2000将会确定她是否引发一个数据未对齐异常,她可以执行一些辅助指令,对问题默默地纠正,时你的代码继续运行.
回复
seanhut 2002-07-22
32位的pc机有64根地址总线,一次可以从内存中取出8个子节的数据,但是访问的地址必须是32/8=4的整数倍,也就是说,不能一次从地址0003向后取出8个子节的数据,所以,数据对齐后,就不会因为一个数据被拆分道两个或多个4字节的单元中而造成两次访问内存.
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告