일부 중요한 코드에는 switch
문이 있습니다. __builtin_expect
으로 최적화하려고했지만 작동하지 않는 것 같습니다. 나는 누군가가 내가 세부 사항을 놓치고 있는지 또는 컴파일러가 단순히 그것을 최적화하지 않는다고 말할 수 있는지 궁금하다. 나는 나의 호스트 시스템에서 다음을 시도 :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;
}
은 그럼 컴파일하고 다음과 같이 실행 : 나는 GCC 버전 4.5.1을 사용하고
~/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
. 컴파일러는 v=7
으로 전체 switch 문을 대체 할 무료 그래서
두 경우 모두 생성 된 어셈블리 코드는 어떻게 생겼습니까? – Leeor