免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4169 | 回复: 7
打印 上一主题 下一主题

内存对齐为什么可以提高访问速度? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-29 10:27 |只看该作者 |倒序浏览
明白内存对齐是怎么回事, 但就是不明白为什么内存对齐可以提高访问内存的速度,多谢指教。

论坛徽章:
0
2 [报告]
发表于 2006-03-29 10:46 |只看该作者
1, 对Cache是友好的, 一次访问正好和Cache的单位相同;
2, 对某机器字长的值,例如32机, 如果对齐访问一个32位数据, 1次访问内存即可;不对齐的话访问多次才行。

论坛徽章:
0
3 [报告]
发表于 2006-03-29 11:06 |只看该作者
cache中的每一块与内存中的块的映射关系是固定的,每次都读一个块,那为什么不对齐的话就要读多次呢?
读多次是不是指: 如果cache的块大小是16btye,要读一个32bit数据,如果数据地址不对齐到cache的0,4,8,12位上的话,当数据处于cache的13,14,15位时就要再读下一块,但当数据处于cache的前面的位时也不需要再读啊?

论坛徽章:
0
4 [报告]
发表于 2006-03-29 11:13 |只看该作者

回复 3楼 Michaelgs 的帖子

比方说一个地址从3开始,四个字节,就是范围是3-6
那么CPU就要从地址0开始读取最后一个字节,也就是地址3的数据,然后到地址4上面读取最前面的三个字节的数据也就是4,5,6三个地址的数据.
从这里可以看CPU需要读取两次.
但是你如果对齐了从地址0或者4开始,那么只需要一次读取就足够了.

这里假设CPU一次读取4个字节.

论坛徽章:
0
5 [报告]
发表于 2006-03-29 11:13 |只看该作者
》每次都读一个块,那为什么不对齐的话就要读多次呢?
不对齐, 一个32位数就分在2个“块”(which should be `cache line')中了, 这个对缓存来说, 既是空间浪费(本来可以只用1个line), 又是时间浪费(试想miss的情况, 岂不是还要从内存读之后更新2 lines cache)?

文字不好描述,书上应该有图。

论坛徽章:
0
6 [报告]
发表于 2006-03-29 11:31 |只看该作者
如果读一个数据值(32bit)要读两次cache或者要读两个页,甚至引发缺页中断,是非常划不来的,计算机系统的设计中要尽量避免可能导致执行时间不确定的情况

论坛徽章:
0
7 [报告]
发表于 2006-03-29 12:00 |只看该作者
如果一个cache line是16个字节,那一个32位数据不对齐的话就必然在两个cache line中吗,应该是只有处于13,14,15字节时才在两个cache line中啊。

还有,是不是所有的数据都要对齐,包括数据区中的,堆栈中的,动态分配的?

论坛徽章:
0
8 [报告]
发表于 2006-03-29 12:06 |只看该作者
原帖由 hellhell 于 2006-3-29 11:31 发表
如果读一个数据值(32bit)要读两次cache或者要读两个页,甚至引发缺页中断,是非常划不来的,计算机系统的设计中要尽量避免可能导致执行时间不确定的情况


好象这种情况, 在一些RISC机器上会引发SIGBUS, i386不会
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP