阅读内核代码过程中,偶尔可以见到 likely() 和 unlikely() 判断语句,那么为什么要用它们?它们之间有什么区别?

首先要明确:

if(likely(value)) 等价于 if(value)

if(unlikely(value)) 也等价于 if(value)

也就是说 likely() 和 unlikely() 从阅读和理解代码的角度来看,是一样的!!!

这两个宏在内核中定义如下:

#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 的值为假的可能性更大。

也就是说,使用 likely() ,执行 if 后面的语句 的机会更大,使用unlikely(),执行else 后面的语句的机会更大。
例如下面这段代码,作者就认为 prev 不等于 next 的可能性更大,

if (likely(prev != next)) {
       next->timestamp = now;
        ...
} else {
        ...;
 }

likely() 和 unlikely() 判断语句相关推荐

  1. Python中if条件判断语句怎么用?

    俗话说"不积跬步无以至千里".学习了Python的基本语法后,接下来我们学习Python常的if条件判断语句. if语句是最简单的条件判断语句,它可以控制程序的执行流程,其使用格式 ...

  2. for循环 lamda python_Python中if-else判断语句、while循环语句以及for循环语句的使用...

    1. if-esle流程判断语句 我们来直接看一个例子,如下,判断我们定义的用户名和用户输入的用户名是否一致.代码当中有几个注意点: 判断的时候用双等号表示判断是否一致(三个等号表示赋值) 你有没有注 ...

  3. jsp判断语句_Java的web展现层JSP的JSTL标签详细总结

    <大数据和人工智能交流>头条号向广大初学者新增C .Java .Python .Scala.javascript 等目前流行的计算机.大数据编程语言,希望大家以后关注本头条号更多的内容. ...

  4. 上升沿判断语句_FPGA入门系列6判断语句

    文章 简介 本系列文章主要针对FPGA初学者编写,包括FPGA的模块书写.基础语法.状态机.RAM.UART.SPI.VGA.以及功能验证等.将每一个知识点作为一个章节进行讲解,旨在更快速的提升初学者 ...

  5. C语言入门练习 - 第二期 判断语句与循环语句(题解)

    比赛地址:C语言入门练习 - 第二期 判断语句与循环语句 A.入门--基础语法(for) #include<stdio.h> int main(){int n,i;scanf(" ...

  6. c#switch语句判断成绩_Go的条件判断语句

    现实时间中,我们如果想去购物,可以选择网上或者线下去购物,甚至说,要购买的物品都有许多选择,选价格便宜的,选质量好的,选不用运费等等 那么在计算机语言中,我们要怎么实现现实中,这些选择呢? Go语言支 ...

  7. for循环递减_判断语句_循环语句

    创建时间:20200418 修改时间:20200629 1. if 判断语句 1.1 if...elif...else...语句格式 Python 中 if 语句的一般形式如下所示: if 如果 &q ...

  8. 选择判断语句(switch)

    选择判断语句(switch) 一.switch语句格式 switch(表达式){ case 取值1: 执行语句: break: case 取值2: 执行语句: break: -...    defau ...

  9. C#开发Unity游戏教程之判断语句

    C#开发Unity游戏教程之判断语句 游戏执行路径的选择--判断 玩家在游戏时,无时无刻不在通过判断做出选择.例如,正是因为玩家做出的选择不同,才导致游戏朝着不同的剧情发展,因此一个玩家可以对一个游戏 ...

  10. golang if 条件判断语句 简介

    一:if判断语句的三种情况 ①:单分支 if 条件判断语句 { 执行语句 } ②:双分支 if 条件判断语句 { 执行语句 }else{ 执行语句 } ③:多分支 if 条件判断语句 { 执行语句 } ...

最新文章

  1. 腾讯AI击败王者荣耀职业队,全靠自学、策略清奇,一天训练量为人类440年
  2. 电脑退出全屏按哪个键_电脑键盘上的F1到F12,每一个都是快捷键大家都会用到...
  3. 随想(二):简化别人的工作,就是简化自己的工作,节省自己的时间
  4. C++ 定义 string
  5. [HAOI 2010]订货
  6. 5动态显示图片_单片机入门 数码管的静态显示和动态显示 壁纸
  7. 2019/2/17 Python今日收获
  8. 为什么越来越多的人尝试做自媒体
  9. 基于visual Studio2013解决面试题之0507字符串转整数
  10. 上传,修改头像的使用
  11. 数据挖掘作业FCM算法
  12. Ubuntu解决RTNETLINK answers: File exists
  13. 台达PLC伺服追剪程序,电子凸轮,全部源代码,PLC程序和触摸屏程序,DVP15MC
  14. Box2d源码学习一之Box2d简介
  15. Pytorch实现CT图像正投影(FP)与反投影(FBP)的模块
  16. html密码域的type属性,查看网页黑点密码 将type=password中password修改成为text
  17. Alexa 一键下单不好用?蓦然认知推出语音对话购物
  18. BUUCTF-PWN刷题记录-17
  19. 200+款神器,全网最好用的免费在线工具,都在这里了!
  20. 台式计算机2017排行分析,CPU天梯图2017年11月最新版 台式电脑处理器天梯排行榜...

热门文章

  1. ZOJ 1090 The Circumference of the Circle(计算三角形的外接圆)
  2. python上机编程报告_20182213 实验一《Python程序设计》实验报告
  3. 魔兽争霸助手(改键+显血)v1.1--屏蔽power键
  4. 【MFC之小知识点】
  5. c# 收取邮件 解析_使用c#+IMap实现收取163邮件
  6. 图像质量评价论文阅读2022.9(1)
  7. 压测利器:TarsBenchmark正确打开方式
  8. UCML 前端非空验证
  9. 索引(index)是什么
  10. 利用jenkins搭建发布系统