我在一些对时间要求严格的代码中有一个switch语句。我正在尝试使用__builtin_expect对其进行优化,但是它似乎无法正常工作。我想知道是否有人可以告诉我我是否缺少一些细节,或者编译器是否没有对此进行优化。我已经在主机上尝试了以下方法:

int main() {
    volatile int v=0;
    long i = 0;

    for (i=0; i<1000000000L; i++) {
            switch(__builtin_expect(v, EXPT)) {
            case 7:
                    v=7;
                    break;
            default:
                    v=7;
                    break;
            }
    }
    return v;
}

然后我编译并运行如下:
~/code/builtinexpect> gcc bie.c -o bie -D EXPT=0 && time ./bie

real    0m2.092s
user    0m2.086s
sys     0m0.000s
~/code/builtinexpect> gcc bie.c -o bie -D EXPT=7 && time ./bie

real    0m2.092s
user    0m2.086s
sys     0m0.000s

我正在使用GCC 4.5.1。

最佳答案

我所知道的任何体系结构上,GCC都不支持此功能。如果您的switch语句强烈支持特定情况,则最佳方法是执行if ... else switch ...语句。这将导致您要寻找的优化。

关于gcc - 您可以将内建的表达式与switch语句一起使用吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21611563/

10-10 17:49