【发布时间】:2020-11-19 23:34:43
【问题描述】:
考虑以下代码:
void func(int a, size_t n)
{
const bool cond = (a==2);
if (cond){
for (size_t i=0; i<n; i++){
// do something small 1
// continue by doing something else.
}
} else {
for (size_t i=0; i<n; i++){
// do something small 2
// continue by doing something else.
}
}
}
在这段代码中,// continue by doing something else.(可能是很大一部分,由于某种原因不能分成一个函数)完全相同地重复。为了避免这种重复,可以这样写:
void func(int a, size_t n)
{
const bool cond = (a==2);
for (size_t i=0; i<n; i++){
if (cond){
// do something small 1
} else {
// do something small 2
}
// continue by doing something else.
}
}
现在我们在一个(假设是非常大的)for 循环中有一个 if 语句。但是 if 语句 (cond) 的条件是 const 并且不会改变。编译器会以某种方式优化代码(比如将其更改为初始实现)吗?有小费吗?谢谢。
【问题讨论】:
-
只看编译器生成的程序集。
-
在这种情况下,现代编译器应该能够对其进行优化。但根据您在内容中调用的方法,可能会认为它毫无意义。在更复杂的情况下,
bool可以在 for 循环期间修改(从编译器的角度来看),那么它将无法执行这样的优化。话虽如此,分支预测器确保它并不重要。 -
第一个代码错过了
}
标签: c++ performance if-statement optimization compiler-optimization