likely() 和 unlikely() 判断语句
阅读内核代码过程中,偶尔可以见到 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() 判断语句相关推荐
- Python中if条件判断语句怎么用?
俗话说"不积跬步无以至千里".学习了Python的基本语法后,接下来我们学习Python常的if条件判断语句. if语句是最简单的条件判断语句,它可以控制程序的执行流程,其使用格式 ...
- for循环 lamda python_Python中if-else判断语句、while循环语句以及for循环语句的使用...
1. if-esle流程判断语句 我们来直接看一个例子,如下,判断我们定义的用户名和用户输入的用户名是否一致.代码当中有几个注意点: 判断的时候用双等号表示判断是否一致(三个等号表示赋值) 你有没有注 ...
- jsp判断语句_Java的web展现层JSP的JSTL标签详细总结
<大数据和人工智能交流>头条号向广大初学者新增C .Java .Python .Scala.javascript 等目前流行的计算机.大数据编程语言,希望大家以后关注本头条号更多的内容. ...
- 上升沿判断语句_FPGA入门系列6判断语句
文章 简介 本系列文章主要针对FPGA初学者编写,包括FPGA的模块书写.基础语法.状态机.RAM.UART.SPI.VGA.以及功能验证等.将每一个知识点作为一个章节进行讲解,旨在更快速的提升初学者 ...
- C语言入门练习 - 第二期 判断语句与循环语句(题解)
比赛地址:C语言入门练习 - 第二期 判断语句与循环语句 A.入门--基础语法(for) #include<stdio.h> int main(){int n,i;scanf(" ...
- c#switch语句判断成绩_Go的条件判断语句
现实时间中,我们如果想去购物,可以选择网上或者线下去购物,甚至说,要购买的物品都有许多选择,选价格便宜的,选质量好的,选不用运费等等 那么在计算机语言中,我们要怎么实现现实中,这些选择呢? Go语言支 ...
- for循环递减_判断语句_循环语句
创建时间:20200418 修改时间:20200629 1. if 判断语句 1.1 if...elif...else...语句格式 Python 中 if 语句的一般形式如下所示: if 如果 &q ...
- 选择判断语句(switch)
选择判断语句(switch) 一.switch语句格式 switch(表达式){ case 取值1: 执行语句: break: case 取值2: 执行语句: break: -... defau ...
- C#开发Unity游戏教程之判断语句
C#开发Unity游戏教程之判断语句 游戏执行路径的选择--判断 玩家在游戏时,无时无刻不在通过判断做出选择.例如,正是因为玩家做出的选择不同,才导致游戏朝着不同的剧情发展,因此一个玩家可以对一个游戏 ...
- golang if 条件判断语句 简介
一:if判断语句的三种情况 ①:单分支 if 条件判断语句 { 执行语句 } ②:双分支 if 条件判断语句 { 执行语句 }else{ 执行语句 } ③:多分支 if 条件判断语句 { 执行语句 } ...
最新文章
- 腾讯AI击败王者荣耀职业队,全靠自学、策略清奇,一天训练量为人类440年
- 电脑退出全屏按哪个键_电脑键盘上的F1到F12,每一个都是快捷键大家都会用到...
- 随想(二):简化别人的工作,就是简化自己的工作,节省自己的时间
- C++ 定义 string
- [HAOI 2010]订货
- 5动态显示图片_单片机入门 数码管的静态显示和动态显示 壁纸
- 2019/2/17 Python今日收获
- 为什么越来越多的人尝试做自媒体
- 基于visual Studio2013解决面试题之0507字符串转整数
- 上传,修改头像的使用
- 数据挖掘作业FCM算法
- Ubuntu解决RTNETLINK answers: File exists
- 台达PLC伺服追剪程序,电子凸轮,全部源代码,PLC程序和触摸屏程序,DVP15MC
- Box2d源码学习一之Box2d简介
- Pytorch实现CT图像正投影(FP)与反投影(FBP)的模块
- html密码域的type属性,查看网页黑点密码 将type=password中password修改成为text
- Alexa 一键下单不好用?蓦然认知推出语音对话购物
- BUUCTF-PWN刷题记录-17
- 200+款神器,全网最好用的免费在线工具,都在这里了!
- 台式计算机2017排行分析,CPU天梯图2017年11月最新版 台式电脑处理器天梯排行榜...
热门文章
- ZOJ 1090 The Circumference of the Circle(计算三角形的外接圆)
- python上机编程报告_20182213 实验一《Python程序设计》实验报告
- 魔兽争霸助手(改键+显血)v1.1--屏蔽power键
- 【MFC之小知识点】
- c# 收取邮件 解析_使用c#+IMap实现收取163邮件
- 图像质量评价论文阅读2022.9(1)
- 压测利器:TarsBenchmark正确打开方式
- UCML 前端非空验证
- 索引(index)是什么
- 利用jenkins搭建发布系统