Linux Likely()/UnLikely() 作用与区别

用例:

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互换或不用都不会影响程序的正确性,但可能会影响程序的效率。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值