请教高手,关于__builtin_expect的问题
在内核代码中,经常会遇到
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
问几个问题:
1 !!(x)前为什么要加两次!!
2 gcc遇到__builtin_expect会优化什么? 优化的基本思路是什么?
3 用__builtin_expect优化后会有多少性能提升? 我的测试代码如下,我发现用__builtin_expect后没有明显的性能提升
int main() {
time_t t1 = time(NULL);
int xxx=0;
for(long i; i < 2000000000L; i++) {
if( likely( xxx == 0) ) {
xxx=i%1;
}
}
time_t t2 = time(NULL);
printf("xxx=%ld\n", xxx);
printf("time=%d\n", t2-t1);
}
每个问题20分, 先答对先得