你可以使用带有switch语句的builtin_expect吗?

Joh*_*ohn 6 gcc switch-statement branch-prediction

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;
}
Run Code Online (Sandbox Code Playgroud)

然后我编译并运行如下:

~/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
Run Code Online (Sandbox Code Playgroud)

我使用的是GCC 4.5.1版.

bla*_*ost 5

GCC 在我知道的任何架构上都不支持这个。如果您的switch陈述强烈支持特定案例,则最好的方法是if ... else switch ...发表陈述。这将导致您正在寻找的优化。