void foo(const int constant)
{
for(int i = 0; i < 1000000; i++) {
// do stuff
if(constant < 10) { // Condition is tested million times :(
// inner loop stuff
}
}
}
对于外循环的每次执行,都会检查“常量”的值。但是,常量永远不会改变,因此浪费了大量 CPU 时间来测试条件常量 < 10?一遍又一遍地。人类会在最初的几次通过后意识到常数永远不会改变,并明智地避免一遍又一遍地检查它。编译器是否注意到这一点并对其进行智能优化,或者重复的 if 循环是否不可避免?
我个人认为这个问题是不可避免的。即使编译器将比较放在外部循环之前并设置某种布尔变量“skip_inner_stuff”,仍然必须检查外部for循环的每次传递。
你对此事有何看法?是否有更有效的方法来编写可以避免该问题的上述代码段?