在linux内核代码中随处可见if语句中出现likely或unlikely,这两个东西是干什么的呢?

偶然看到有人问这个问题,自己也整理一下~

likely或unlikely用于优化条件语句,其一般用法为:

条件判断之后会有两个出口,一个是真,一个是假。然而编译生成的目标代码是扁平的,其中的一个出口必须通过跳转来实现。
考虑下面一个场景:
1、判断条件;
2、条件为真跳转到4;
3、进行条件为假时的处理;
4、进行条件为真时的处理;
可见,如果条件为真,多了一次JMP操作,并且由于JMP打断了处理器流水。

likely(x)和unlikely(x)的作用是用来指导编译的,让代码在大多数情况下不会发生JMP的情况。
比如,likely(x)就告诉编译器,x在大多数情况下的结果会是真,于是编译器生成的结果为真的出口不需要JMP。unlikely(x)类似~

突然又想到一个问题,其实likely和unlikely应该只对单条件的if语句才有意义的。如果是多个条件的复合,条件表达式值的计算本身就要通过JMP来选择真假出口,所以用不用likely都影响不大。

浅谈likely与unlikely相关推荐

  1. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  2. 【大话设计模式】——浅谈设计模式基础

    初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...

  3. 学校计算机机房好处,浅谈学校计算机机房维护

    浅谈学校计算机机房维护    现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...

  4. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  5. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  6. 浅谈GCC预编译头技术

    浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...

  7. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

  8. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

  9. 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...

  10. 浅谈几种区块链网络攻击以及防御方案之女巫攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/13/network_attack_of_blockchain_sybil_attack/ 写在前面的话 自比特 ...

最新文章

  1. 一文盘点10大移动端机器学习框架
  2. linux i2c 设备 操作说明
  3. 可编程led灯带原理_技术分享:二极管发光原理与LED灯带
  4. Android租赁源码,AndroidUS六仔源码出租的配置文件操作封装
  5. Linux-Input入门-一次愉快的源码分析
  6. Elsevier 模板 Latex参考文献按引用顺序排列
  7. 计算机网络考研知识点整理,计算机网络考研知识点
  8. 【附源码】计算机毕业设计java业俊宾馆客房管理系统设计与实现
  9. XML 转 JSON
  10. linux peek,Peek - Gif 录制软件
  11. 解决项目中使用kotlin不能直接引用xml中id
  12. js字符转换成分数_js小数转分数-近似递归
  13. 鸿蒙时期的修真等级,相关介绍关于小说里的修真和武器等级划分
  14. 中国太阳能跟踪器行业市场供需与战略研究报告
  15. 服务器配置记录(五)GNS3虚拟机SSH配置
  16. C Primer Plus 学习打卡之第二章(含课后编程答案)
  17. Hgame-Week3
  18. 浅谈React与jQuery的思维差异
  19. MySQL读已提交有间隙锁吗_mysql中的幻读与间隙锁
  20. osg::ArgumentParser和osg::ApplicationUsage

热门文章

  1. 物联网面临的7大网络安全威胁
  2. 在分析了AI顶会上的6163篇论文后,我们能发现怎样的发展趋势与变化……
  3. 重磅!《2021中国开源发展蓝皮书》发布
  4. 如何打造一个搞垮团队的绩效考核?
  5. 在大厂干了 5 年产品后,如今她裸辞回家开店去了
  6. 后疫情时代下,企业数字化转型之路如何走?
  7. 星期和工作日计算,你会了吗?
  8. 15.3. REST
  9. Java字符串就该这样设计
  10. 深入理解ES6 - var-let-const