LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: 柏仔

关于<高质量C/C++编程指南>中提到的多重for循环效率问题

[复制链接]
发表于 2006-3-24 01:50:58 | 显示全部楼层
mov指令对1字节和4字节的操作数latency是一样的,看起来似乎也没有对齐的问题

Post by 自然平衡
嗯,应该是和CPU字长对齐有关,和CPU字长相等的类型比不相等的类型效率要高。
回复 支持 反对

使用道具 举报

发表于 2006-3-24 08:38:10 | 显示全部楼层
觉得和对齐是有关系的,寻址的时候如果是机器字长的话不存在奇偶存储体带来的问题,但是不等长的其他数据类型都有可能使机器多次读取。不知道对不对........
回复 支持 反对

使用道具 举报

发表于 2006-3-24 13:37:25 | 显示全部楼层
Post by woolzey
mov指令对1字节和4字节的操作数latency是一样的,看起来似乎也没有对齐的问题

要访问内存(cache)时可能就不一样了。具体怎样我也不太记得了,应该是楼上mousse所说的那样。
回复 支持 反对

使用道具 举报

发表于 2006-3-25 01:13:14 | 显示全部楼层
现在CPU的L1 cache line通常是64字节,也就是存取一次内存是以64字节为单位的,因此如果指令中存取的内存跨了64字节的边界,就会带来额外的操作。这也是为什么需要对齐的原因。但是char本身是单字节的,所以应该不会带来这些后果。

至于说机器字长的效率高,应该是指处理相同数据量时,尽可能一次操作处理尽量多的数据。而这个测试程序使用char和int时是保持操作次数相同,因此我实在想不通为什么char会慢。

Post by mousse
觉得和对齐是有关系的,寻址的时候如果是机器字长的话不存在奇偶存储体带来的问题,但是不等长的其他数据类型都有可能使机器多次读取。不知道对不对........
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-27 22:07:04 | 显示全部楼层
答案已超过我能理解的范围了
不过起码知道就两个for循环的位置本身而言,效率并没有书上说的相差那么远。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表