经常能在源码中很多分支条件判断加了这两个宏,了解具体的作用。

例如:

 if (UNEXPECTED(Z_TYPE_P(member) != IS_STRING)) {ZVAL_COPY(&tmp_member, member);convert_to_string(&tmp_member);member = &tmp_member;cache_slot = NULL;}
#if PHP_HAVE_BUILTIN_EXPECT
# define EXPECTED(condition)   __builtin_expect(!!(condition), 1)
# define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
#else
# define EXPECTED(condition)   (condition)
# define UNEXPECTED(condition) (condition)
#endif

__builtin_expect是 GCC 编译器的一个内置宏,原型是

long __builtin_expect(long exp, long c);

函数的用法是:

  • exp函数返回值
  • 告诉编译器期望 exp 等于 c

EXPECTED 预期望结果

UNEXPECTED 不期望结果

UNEXPECTED和EXPECTED 就是预测分支结果来预先读取分支指令,增加代码的执行效率。

PHP源码中EXPECTED和UNEXPECTED的作用相关推荐

  1. Tomcat源码中ObjectName这个类的作用

    2019独角兽企业重金招聘Python工程师标准>>> Tomcat源码中ObjectName这个类的作用 转载于:https://my.oschina.net/u/2308739/ ...

  2. Caffe源码中各种依赖库的作用及简单使用

    1.      Boost库:它是一个可移植.跨平台,提供源代码的C++库,作为标准库的后备. 在Caffe中用到的Boost头文件包括: (1).shared_ptr.hpp:智能指针,使用它可以不 ...

  3. Redis源码和java jdk源码中hashcode的不同实现

    一.redis实际上是使用了siphash 这个比较简单,我说的简单是指redis代码比较少不像jdk一样调用C++代码调用栈非常深. 先看这个rehashing.c 主要就是dictKeyHash函 ...

  4. Java 8 ConcurrentHashMap源码中竟然隐藏着两个BUG

    Java 7的ConcurrenHashMap的源码我建议大家都看看,那个版本的源码就是Java多线程编程的教科书.在Java 7的源码中,作者对悲观锁的使用非常谨慎,大多都转换为自旋锁加volati ...

  5. lodash源码中debounce函数分析

    lodash源码中debounce函数分析 一.使用 在lodash中我们可以使用debounce函数来进行防抖和截流,之前我并未仔细注意过,但是不可思议的是,lodash中的防抖节流函数是一个函数两 ...

  6. MXNET源码中NDArray数据的获取和打印

    虽然本人也很想写一个系列的分析文章,奈何水平不足,零零碎碎学到一点就写一点吧 本人是想学习MXNET的源码,首先想要添加一些打印,debug一下,第一个问题是如何在C++源码中打印出NDArray结构 ...

  7. Caffe源码中io文件分析

    Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/util/io.hpp文件 ...

  8. 盘点 HashMap 源码中的那些优雅的设计!

    以下文章来源方志朋的博客,回复"666"获面试宝典 一.HashMap构造器 HashMap总共给我们提供了三个构造器来创建HashMap对象. 1.无参构造函数public Ha ...

  9. rust墙壁升级点什么_分享:如何在阅读Rust项目源码中学习

    今天做了一个Substrate相关的小分享,公开出来. 因为我平时也比较忙,昨天才选定了本次分享的主题,准备比较仓促,细节可能不是很充足,但分享的目的也是给大家提供一个学习的思路,更多的细节大家可以在 ...

  10. 总结|ORB_SLAM2源码中字典使用细节

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 前段时间,主要对ORB-SLAM2中字典的训练与使用进行了些研究,关于字典的训练之前也写过一篇文 ...

最新文章

  1. ef core mysql 字符集,EF Core 基础知识
  2. iOS 视频捕获系列Swift之AVFoundation(一)
  3. zendopcache代替APC效果不错
  4. 有必要学python吗-让孩子学Python编程有必要吗
  5. 彻底理解宽带信号在频域分解为窄带信号
  6. python 零矩阵
  7. 5G边缘计算与算力网络(PPT)
  8. 我的2020电视机选购
  9. VS2015配置opencv教程(图文详解)
  10. python找指定内容_python查找指定具有相同内容文件的方法
  11. BS作业 基于springboot + Thymeleaf +mybatis 实现的书城管理系统
  12. [蓝桥杯2016决赛]愤怒小鸟-模拟
  13. 科大讯飞成为北京 2022 年冬奥会和冬残奥会官方自动语音转换与翻译独家供应商
  14. [书目20110326]高素质员工的28堂必修课
  15. qq音乐api android,QQ音乐
  16. esp8266 接入 Amazon alexa智能家居
  17. java 泛型去重_泛型,list集合去重
  18. 十代主板改win7_微星b460主板装win7系统及bios设置教程(支持十代usb驱动)
  19. 电力拖动自动控制系统复习补充
  20. 牛顿法详解(海森矩阵如何使用)

热门文章

  1. windows10桌面壁纸的储存地址在哪里
  2. 如何保存Win10壁纸
  3. 568A/568B接法
  4. new QPushbutton 时程序崩溃
  5. Zabbix 5.0.13 与阿里云企业邮箱告警
  6. 某公司的雇员分为以下若干类: Employee:这是所有员工总的父类.属性:员工的姓名,员工的生日月份。 方法:getSalary(intmonth)
  7. 云服务器安全组开放所有端口
  8. Excel二次开发学习笔记——获取某列最后一个非空单元格的行号
  9. 人文视野中的生态学题库
  10. empty是什么意思 php,empty是什么意思中文翻译