汇编高手来说下内存对齐背后CPU究竟是怎么操作的?比如硬件会有什么优化?

ShanChunZhenZi 2006-09-24 04:52:32
汇编高手来说下内存对齐背后CPU究竟是怎么操作的?比如硬件会有什么优化?
...全文
440 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Unknowm 2006-10-10
  • 打赏
  • 举报
回复
不好意思我理解错了,上面说的不算
Unknowm 2006-10-09
  • 打赏
  • 举报
回复
cache行如果是64个byte的话就是64个byte对齐的,既然64都对齐了,4肯定对齐了
BadEnglish 2006-09-28
  • 打赏
  • 举报
回复
你需要了解一些RAM的硬件,
比如8位的内存片,每个地址有8位数据,
你要第0,第1位还好说,一起出来了,
你要第7,第8位时就麻烦,地址不一样,CPU要打2次地址读2次数局
现在的PC外部内存是64位,双通道内存PC是128位,
混淆出于PC指令按8位编址
Bill1212 2006-09-28
  • 打赏
  • 举报
回复
我补充一下:
另一方面是cache的问题,例如现在P4访问cache以line为单位,每line包括64个byte,假如在运算中不以4byte对齐,就有可能跨越64byte边界。这样cpu要两次访问cache才能拿全数据。
  • 打赏
  • 举报
回复
根本原因在于内存的最小访问单位超过一个字节。
最早的PC机内存是8-bit接口,就没有对齐的问题。
hswxf 2006-09-26
  • 打赏
  • 举报
回复
楼上各位:
如果用一个最根本的说法:对齐的根本在于存储器的偶体与奇体结构,而寻址是按偶地址开始的
。。。。。。。呵呵
不知道对否!
vcPlayer 2006-09-26
  • 打赏
  • 举报
回复
地址线的变动数及频率都减小,相对来说更稳定可靠。

比如20根地址线:如果是字节对齐,则每次都要变更20条线;
如果是字对齐,则只需变换高19条线;依此类推……
  • 打赏
  • 举报
回复
基本上与处理器没关系,是内存控制器的原因(当然现在有的处理器集成了内存控制器)。
读写内存的指令使处理器的RD、WR(通常是低电平有效,所以表示起来应该有上划线,但是我不知道怎么敲出来)引脚有效,并在地址总线上产生地址,引发内存控制器的工作。
内存控制器能一次访问的内存单元是有固定宽度的,比如16-bit、32-bit、64-bit等等。
非对齐的访问可能需要访问两个内存单元,当然慢一些。
事实上,为了简化内存控制器的设计,某些RISC架构的处理器强制地址对齐,否则就产生异常(可以用异常处理来模拟非对齐访问)。
WYlslrt 2006-09-24
  • 打赏
  • 举报
回复
内存对齐,是针对内存访问效率而采取的措施。
对于CPU来说,一个CPU字可以是一个或多个字节,而寻址能力可以为字节,也可以为字或双字。而主存储器一般采用多体方式,使多个存储体并行工作,如一个机器的存储器体系为4体交叉编址,每个体字宽度为1个字节,CPU字为4个字节,寻址能力可以为字节、字和双字。下面是编制过后的地址分布图
体3 体2 体1 体0
------------------------------
3 2 1 0
7 6 5 4
......
4n+3 4n+2 4n+1 4n
-------------------------------
如果CPU从地址0开始读一个双字,那么则可以在一个访存周期里获得。但是如果从地址1开始读一个双字,那么就需要两个访存周期了,第一个周期获得地址1,2,3的数据,第二个周期获得地址4的数据,这样效率就会降低。
因此为了效率,有时需要进行内存对齐,减少访存周期。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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