函数调用的代价是多少?

时间:2011-08-25 02:19:42

标签: function optimization g++

所以,有两种情况:

情况1:

if (doSomething) doFunction();
//...
void doFunction() {
    // ... do something time consuming 
}

案例2:

doFunction();
//...
void doFunction() {
    if (!doSomething) return; 
    // ... do something time consuming 
}

这是在非常时间敏感的环境中(大约0.1毫秒会产生很大的不同); doFunction()经常被调用(大约100次),而且通常是doSomething是假的。似乎很明显案例1会更有效率,但是效率是多少?或者它不会产生影响(大约0.01毫秒)?

2 个答案:

答案 0 :(得分:4)

案例1会更有效率。差异的幅度很小;我们谈论的是一条指令和几条指令之间的区别 - 所以在每秒可以执行几百万条指令的任何机器上,这都是微不足道的。

第一种情况(通常)由单个条件跳转指令实现。

在第二种情况下,除了条件跳转之外,函数调用的开销总是存在。

可能是编译器无论如何都会优化第二种情况,使它们等效。您可以通过查看编译器输出或自行计时来进行检查。

答案 1 :(得分:1)

函数调用涉及将东西放在堆栈帧上,然后在调用return时将这些东西弹回。它们都涉及条件jmp(跳转),因此不会影响性能。我会采用第一种方法。