内核2.6的代码里经常看到下面两个函数:
if(likely(value)) 等价于 if(value)
if(unlikely(value)) 也等价于 if(value)
这个两个宏在内核中定义是:
#define likely(x) __builtin_expect((x),1)#define unlikely(x) __builtin_expect((x),0)
__builtin_expect() 是 GCC (version >= 2.96)提供给程序员使用的,目的是将“分支转移”的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。
__builtin_expect((x),1) 表示 x 的值为真的可能性更大;
__builtin_expect((x),0) 表示 x 的值为假的可能性更大。
使用的目的是:
将“分支转移”的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。
本文介绍内核2.6中likely与unlikely宏的定义与使用目的,解释了这两个宏如何通过__builtin_expect函数告诉编译器分支预测信息,从而优化代码并减少指令跳转导致的性能损失。
482

被折叠的 条评论
为什么被折叠?



