#define nn_fast(x) __builtin_expect ((x), 1) #define nn_slow(x) __builtin_expect ((x), 0) __builtin_expect目的是提供分支信息给编译器,让编译器优化代码,减小指令的跳转带了的性能降低。 处理器里有不少处理单元,能够预加载不少指令进行并行运算,可是若是遇到跳转的指令没有加载处处理 单元中,全部的预加载指令都必须从新加载。 __builtin_expect ((x), 1) 这个能够告诉编译器,x为真的状况比较多 __builtin_expect ((x), 0) 这个能够告诉编译器,x为假的状况比较多 if (__builtin_expect ((x), 1)) { code1... } else { code2.... } x为真的状况多,编译器编译的时候优化代码,使得执行时,预先加载code1的代码的指令 __builtin_expect ((x), 0)同理,预先加载code2的代码指令。 __builtin_expect不影响到x的值,x为真,__builtin_expect返回的值也为真 if(nn_fast(x)) == if (x) if(nn_slow(x)) == if (x)