__builtin_expect的作用
CPU在执行当前指令时,从内存中取出了当前指令的下一条指令。但当前指令如果为跳转指令,那麽刚才取下一条指令的操作就相当于是白搞了,而要重新取跳转偏移处的指令。所以要尽量避免跳转,即尽量让希望执行的下一条指令,紧接着当前指令。例如如下情景:
bool x;// 很特殊的情况下,值才为true,大部分时间为false
if (x == false)
①;
else
②;
既然x值为false的概率大,那麽①处的代码执行的机会多,②代码执行的机会少,所以我们希望编译器能把①指令放在紧接在判断指令的地方,②指令放在需要跳转的地方,即:
if (__builtin_expect(x, false))
①;
else
②;
所以这个东西适用的场景是:我们按照经验知道判断的结果偏向于哪边,比如我们写个程序从一大堆人中挑选身高超过2米的,明显只有少部分超过,就可以用一下这个东西,提高点效率。 呵呵,likely和unlikely接口就是通过这个实现的~ 是的。回复 2# humjb_1983
页:
[1]