循环不变代码外提

原理

循环中不变代码外提即把产生的结果独立于循环执行次数的表达式,放到循环执行前。可以有效的减少循环中的代码运算量,提高代码运行速度。编译器可以对部分代码进行不变代码外提优化,如果表达式存在指针或者引用,则编译器不会进行自动优化。

修改方式

修改前:
void fun(int arrayA [], int *p) {
    for (int i = 0; i < ARRAYLEN; ++i) {
        arrayA [i] = *p + *p + i;
    }
}

修改后:

void fun(int arrayA [], int *p) {
    int tmp = *p + *p;
    for (int i = 0; i < ARRAYLEN; ++i) {
        arrayA [i] = tmp + i;
    }
}