所以,有两种情况:
情况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毫秒)?
答案 0 :(得分:4)
案例1会更有效率。差异的幅度很小;我们谈论的是一条指令和几条指令之间的区别 - 所以在每秒可以执行几百万条指令的任何机器上,这都是微不足道的。
第一种情况(通常)由单个条件跳转指令实现。
在第二种情况下,除了条件跳转之外,函数调用的开销总是存在。
可能是编译器无论如何都会优化第二种情况,使它们等效。您可以通过查看编译器输出或自行计时来进行检查。
答案 1 :(得分:1)
函数调用涉及将东西放在堆栈帧上,然后在调用return时将这些东西弹回。它们都涉及条件jmp
(跳转),因此不会影响性能。我会采用第一种方法。