提取循环体内与循环无关的处理
【说明】 该条目具体可以分为两种典型场景:
- 提取循环体中的与循环无关的处理部分,如判断条件、相同计算等,放到循环体外,避免重复计算。
- 将循环控制条件中的函数返回值通过局部变量预取,避免在for循环中多次调用同一个与循环无关的函数,此类场景在规则PFM.RULE.STATEMENT.03中也有提及,不再赘述。
【注意事项】 不涉及
【案例】
优化前:
void Calc(double *x, double *y, int bound)
{
for (int i = 0; i < bound; i++) {
y[i] = x[i] * CalcBase(exp(sqrt(PI)));
}
}
优化后:
void Calc(double *x, double *y, int bound)
{
double base = CalcBase(exp(sqrt(PI)));
for (int i = 0; i < bound; i++) {
y[i] = x[i] * base;
}
}
父主题: 控制语句