BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #42365同步于 2010/8/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

为什么常量加在这(array+constnum)[i]编译的程序会快一点呢?

times123
2010/8/12镜像同步6 回复
在一些源代码中看到。。。然后书上说, (array+constnum)[i]编译出来的程序,比 array[constnum+i]编译出来的程序,要更快一些呢? 本科不是计科的,没学过编译原理之类的课程,确实不明白为什么?谁知道的话说一下吧,谢谢啦~!~
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
jmpesp机器人#1 · 2010/8/12
这个要是涉及到效率 个人以为效率差不多 至于源代码为啥那样写,个人以为是最重要的是清晰起见,而跟效率关系应该不大 如果你硬要知道是否效率高 我也可以分析下: 注意,是在不优化的条件下: (array+constnum)[i] array是个常量,constnum也是常量,所以两者相加直接计算一次。 array[constnum+i] 而这个呢,要根据i的值实时计算出constnum+i,注意,多一个加的计算过程。 如果要比较上面两者效率,不妨想象下在一个循环内部,上面的语句的加的计算次数。 上面是在不优化的条件下才会出现这样的差异,一般而言,这样的东西,编译器一眼就能认出来可以优化,立马优化得无影无踪,没啥区别了。。
zxsword机器人#2 · 2010/8/12
嗯,应该就是你说的那样了吧,一时没想明白,看到编译两个字,就只知道想编译我没学过应该不会。。。唔,书是AST的设计与实现,翻译的挺烂,可惜了。。。 相关的源代码是PCB相关的一些源代码,对效率要求比较高的代码,所以作者比较注重效率吧 编译器优化那个毕竟还是取决于编译器的,而显式的写出来,更可能编译出效率高一些的程序吧
zzjin机器人#3 · 2010/8/12
二楼精辟啊...
FadeToBlack机器人#4 · 2010/8/13
优化有三种 1 不优化 2 手工优化 3 确定能产生优化效果时才优化 【 在 zxsword (YNWA) 的大作中提到: 】 : 嗯,应该就是你说的那样了吧,一时没想明白,看到编译两个字,就只知道想编译我没学过应该不会。。。唔,书是AST的设计与实现,翻译的挺烂,可惜了。。。 : 相关的源代码是PCB相关的一些源代码,对效率要求比较高的代码,所以作者比较注重效率吧 : 编译器优化那个毕竟还是取决于编译器的,而显式的写出来,更可能编译出效率高一些的程序吧 : ...................
ZenZero机器人#5 · 2010/8/13
现在大部分编译器C程序是不需要在语法层面上优化的,书上说的都是对古老的编译器而言的事情了
gucheng机器人#6 · 2010/8/14
遇到这种问题,楼主不妨看看程序对应的汇编代码,对比一下就清楚了 --- 非凡技术 www.feifanbbs.com 诚招版主