QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2631|回复: 5

编译器的一个细节问题

[复制链接]
发表于 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);
两种方法哪个会效率比较高?
发表于 2006-4-27 13:29:51 | 显示全部楼层
不知道,感觉应该是上一种比较快。期待正解
回复

使用道具 举报

发表于 2006-5-12 18:10:28 | 显示全部楼层
我觉得如果编译器有优化,应该没有差别!
回复

使用道具 举报

发表于 2006-5-13 09:24:53 | 显示全部楼层
我的感觉也是第一种代码效率要高一点,因为第二种代码在执行时还得分配一个空间给tmp,另外还有其他的一些操作,即使有代码的优化,这个优化也是要花费时间的,可能花费的时间很少,可以忽略吧!这只是我个人的看法,不知道对不对啊!
回复

使用道具 举报

发表于 2006-5-28 21:39:51 | 显示全部楼层
这么没有场景的比较没有意义。如果在同一函数域中,编译器会自动替换,那么运行效率一样。。。
如果远程调用,需要一个赋值过程,但是这个影响基本忽略。如果把注意力放在这儿,还不如放到其他可以优化的地方。
回复

使用道具 举报

发表于 2006-6-15 13:37:47 | 显示全部楼层
如果没有优化,第一种代码效率要高一点,如果做了优化,则效率一样.其实可以用gcc -S 和 gcc -O2 -S 看编译出来的汇编.
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-4-24 01:09 , Processed in 0.231984 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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