manfonly 发表于 2006-4-24 08:21:56

编译器的一个细节问题

如果有一个函数void fn(int i);
下面两种使用方法,编译器是怎么看待的呢?
(1)
fn(12345);
fn(12345);
fn(12345);
(2)
int tmp=12345;
fn(tmp);
fn(tmp);
fn(tmp);
两种方法哪个会效率比较高?

decwang 发表于 2006-4-27 13:29:51

不知道,感觉应该是上一种比较快。期待正解

yc200405 发表于 2006-5-12 18:10:28

我觉得如果编译器有优化,应该没有差别!

huyongchao98 发表于 2006-5-13 09:24:53

我的感觉也是第一种代码效率要高一点,因为第二种代码在执行时还得分配一个空间给tmp,另外还有其他的一些操作,即使有代码的优化,这个优化也是要花费时间的,可能花费的时间很少,可以忽略吧!这只是我个人的看法,不知道对不对啊!

armybird1016 发表于 2006-5-28 21:39:51

这么没有场景的比较没有意义。如果在同一函数域中,编译器会自动替换,那么运行效率一样。。。
如果远程调用,需要一个赋值过程,但是这个影响基本忽略。如果把注意力放在这儿,还不如放到其他可以优化的地方。

mips.4Kc 发表于 2006-6-15 13:37:47

如果没有优化,第一种代码效率要高一点,如果做了优化,则效率一样.其实可以用gcc -S 和 gcc -O2 -S 看编译出来的汇编.
页: [1]
查看完整版本: 编译器的一个细节问题