用例:
if( unlikely(err) ) {
printk("aee: failed to register aed_wdt_RT_Monitor_dev device!\n");
return err;
} else {
printk("its ok!\n"); // 使用 unlikely(),表示执行此处 ( else{} )代码的可能性较大,用于优化代码效率。
}
Likely()/UnLikely() 为 Linux定义的两个宏,
位于/include/linux/compiler.h中,具体定义如下:
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
__builtin_expect() 是gcc中提供的一个预处理命令,用作代码优化。
__builtin_expect(!!(x), 1) 表示 x == 1可能性比较大, __builtin_expect(!!(x), 0) 表示 x == 0的可能性比较大。
也就是说,
if( likely(err) ) {
// 使用 likely() ,表示执行这里的可能性比较大,编译器会把这部分代码放到前边
} else {
}
if( unlikely(err) ) {
} else {
// 使用 unlikely() ,表示执行这里的可能性比较大,编译器会把这部分代码放到前边
}
这样有利于cpu预取,提高预取指令的正确率,因而可提高效率。
总之,likely与unlikely互换或不用都不会影响程序的正确性,但可能会影响程序的效率。