Ich habe eine switch
Anweisung in einem zeitkritischen Code. Ich habe versucht, es mit __builtin_expect
zu optimieren, aber es scheint nicht zu funktionieren. Ich frage mich, ob mir jemand sagen kann, ob mir etwas fehlt oder ob der Compiler einfach nicht dafür optimiert. Ich habe versucht, die folgenden auf meinem Host-Maschine:Können Sie builtin_expect mit switch-Anweisung verwenden
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;
}
Dann habe ich kompilieren und ausführen wie folgt:
~/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
I GCC Version 4.5.1 verwende.
Wie sieht der erstellte Assemblercode in beiden Fällen aus? – Leeor