小编Par*_*e56的帖子

使用GCC优化C/C++中循环内的嵌套if语句

我正在使用GCC编译器测试C/C++中的各种优化.我目前有一个包含多个嵌套if语句的循环.条件是在程序执行开始时计算的.看起来有点像这样:

bool conditionA = getA();
bool conditionB = getB();
bool conditionC = getC();
//Etc.

startTiming();

do {
    if(conditionA) {
        doATrueStuff();
        if(conditionB) {
            //Etc.
        } else {
            //Etc.
        }
    } else {
        doAFalseStuff();
        if(conditionB) {
            //Etc.
        } else {
            //Etc.
        }
    }
} while (testCondition());

endTiming();
Run Code Online (Sandbox Code Playgroud)

doATrueStuff()内联函数在哪里进行一些简单的数值计算,因此调用它没有任何开销.

不幸的是,不能事先定义条件,它们必须在运行时计算.我们甚至无法可靠地预测他们是真是假的可能性.getA()也许是rand()%2.但经过计算,它们的价值永远不会改变.

我想到了两个解决方案,一个是全局函数指针,用于在循环中调用适当的函数,如下所示:

void (*ptrA)(void);
//Etc.

int main(int argc, char **argv) {
    //...
    if (conditionA) {
        ptrA=&aTrueFunc;
    } else {
        ptrA=&aFalseFunc;
    }
    //...
    do {
        (*ptrA)();
    } while (testCondition());
    //... …
Run Code Online (Sandbox Code Playgroud)

c c++ optimization gcc loops

9
推荐指数
1
解决办法
2578
查看次数

标签 统计

c ×1

c++ ×1

gcc ×1

loops ×1

optimization ×1