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

dream_fish 2002-07-22 10:03:54
为什么数据对齐能够减少访存次数?
...全文
353 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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字节的单元中而造成两次访问内存.

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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