【发布时间】:2010-11-13 14:45:14
【问题描述】:
如果 if 语句中的每个块都返回,是 if / else if 更好,还是有 if 链更好?具体来说,如果最快的话:
答:
if (condition1) {
code1;
return a;
}
if (condition2) {
code2;
return b;
}
//etc...
乙:
if (condition1) {
code1;
return a;
}
else if (condition2) {
code2;
return b;
}
//etc...
【问题讨论】:
-
我会 assume 前者更快,但使用第二个可能会更好,因为更清楚的是,除非第一个 if 块不会被执行,否则第二个 if 块将不会被执行条件失败。
-
不,C 没有规定在 CPU 级别会发生什么。似乎有一个没有 JMP 语句的 CPU 架构,它使用一个标志来执行语句但丢弃结果。这意味着速度是相同的。我的观点:你不能假设 C 代码会在幕后变成什么样子。
-
“架构......它使用一个标志仍然执行语句但丢弃结果”。例如 ARM 有条件指令,如果条件标志被设置,则执行,如果没有,则作为 nops。它们是由编译器在跳转比它要跳过的操作数慢的情况下发出的。
-
在“else if (statement)”中执行语句并丢弃结果将意味着编译器严重损坏。
-
我假设这种情况下的“结果”是指“包括任何副作用”。也就是说,汇编指令的结果,而不是表达式计算结果在 C 意义上的结果。显然,如果“code1”和“code2”不是完全内联的,那么编译器就不能使用这个选项。
标签: c optimization performance conditional