linux中 likely与unlikely

本文介绍了Linux内核中likely与unlikely宏的作用及其使用场景。通过这些宏,程序员可以告诉编译器某些条件判断的结果更倾向于真还是假,从而帮助CPU进行更好的指令预取,提升程序运行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux中 likely与unlikely ,见了不少次,但终究没体验过所谓的提高效率,所以,如果不是阅读他人的讲解,自己在码砖的时候就不能想到使用它,软实力的一个体现吧。

分享自: http://blog.youkuaiyun.com/tommy_wxie/article/details/7384641


看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,具体定义如下:
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)

#define likely(x) __builtin_expect(!!(x), 1)也就是说明x==1是“经常发生的”或是“很可能发生的”。
使用likely ,执行if后面语句的可能性大些,编译器将if{}是的内容编译到前面, 使用unlikely ,执行else后面语句的可能性大些,编译器将else{}里的内容编译到前面。这样有利于cpu预取,提高预取指令的正确率,因而可提高效率。

总之,likely与unlikely互换或不用都不会影响程序的正确性。但可能会影响程序的效率。

if(likely(foo))  //认为foo通常为1

if(unlikely(foo)) //认为foo通常为0


!!(x)这个操作会把 x 转化成bool值,即0或1.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值