PHP源码中EXPECTED和UNEXPECTED的作用
经常能在源码中很多分支条件判断加了这两个宏,了解具体的作用。
例如:
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的作用相关推荐
- Tomcat源码中ObjectName这个类的作用
2019独角兽企业重金招聘Python工程师标准>>> Tomcat源码中ObjectName这个类的作用 转载于:https://my.oschina.net/u/2308739/ ...
- Caffe源码中各种依赖库的作用及简单使用
1. Boost库:它是一个可移植.跨平台,提供源代码的C++库,作为标准库的后备. 在Caffe中用到的Boost头文件包括: (1).shared_ptr.hpp:智能指针,使用它可以不 ...
- Redis源码和java jdk源码中hashcode的不同实现
一.redis实际上是使用了siphash 这个比较简单,我说的简单是指redis代码比较少不像jdk一样调用C++代码调用栈非常深. 先看这个rehashing.c 主要就是dictKeyHash函 ...
- Java 8 ConcurrentHashMap源码中竟然隐藏着两个BUG
Java 7的ConcurrenHashMap的源码我建议大家都看看,那个版本的源码就是Java多线程编程的教科书.在Java 7的源码中,作者对悲观锁的使用非常谨慎,大多都转换为自旋锁加volati ...
- lodash源码中debounce函数分析
lodash源码中debounce函数分析 一.使用 在lodash中我们可以使用debounce函数来进行防抖和截流,之前我并未仔细注意过,但是不可思议的是,lodash中的防抖节流函数是一个函数两 ...
- MXNET源码中NDArray数据的获取和打印
虽然本人也很想写一个系列的分析文章,奈何水平不足,零零碎碎学到一点就写一点吧 本人是想学习MXNET的源码,首先想要添加一些打印,debug一下,第一个问题是如何在C++源码中打印出NDArray结构 ...
- Caffe源码中io文件分析
Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/util/io.hpp文件 ...
- 盘点 HashMap 源码中的那些优雅的设计!
以下文章来源方志朋的博客,回复"666"获面试宝典 一.HashMap构造器 HashMap总共给我们提供了三个构造器来创建HashMap对象. 1.无参构造函数public Ha ...
- rust墙壁升级点什么_分享:如何在阅读Rust项目源码中学习
今天做了一个Substrate相关的小分享,公开出来. 因为我平时也比较忙,昨天才选定了本次分享的主题,准备比较仓促,细节可能不是很充足,但分享的目的也是给大家提供一个学习的思路,更多的细节大家可以在 ...
- 总结|ORB_SLAM2源码中字典使用细节
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 前言 前段时间,主要对ORB-SLAM2中字典的训练与使用进行了些研究,关于字典的训练之前也写过一篇文 ...
最新文章
- ef core mysql 字符集,EF Core 基础知识
- iOS 视频捕获系列Swift之AVFoundation(一)
- zendopcache代替APC效果不错
- 有必要学python吗-让孩子学Python编程有必要吗
- 彻底理解宽带信号在频域分解为窄带信号
- python 零矩阵
- 5G边缘计算与算力网络(PPT)
- 我的2020电视机选购
- VS2015配置opencv教程(图文详解)
- python找指定内容_python查找指定具有相同内容文件的方法
- BS作业 基于springboot + Thymeleaf +mybatis 实现的书城管理系统
- [蓝桥杯2016决赛]愤怒小鸟-模拟
- 科大讯飞成为北京 2022 年冬奥会和冬残奥会官方自动语音转换与翻译独家供应商
- [书目20110326]高素质员工的28堂必修课
- qq音乐api android,QQ音乐
- esp8266 接入 Amazon alexa智能家居
- java 泛型去重_泛型,list集合去重
- 十代主板改win7_微星b460主板装win7系统及bios设置教程(支持十代usb驱动)
- 电力拖动自动控制系统复习补充
- 牛顿法详解(海森矩阵如何使用)
热门文章
- windows10桌面壁纸的储存地址在哪里
- 如何保存Win10壁纸
- 568A/568B接法
- new QPushbutton 时程序崩溃
- Zabbix 5.0.13 与阿里云企业邮箱告警
- 某公司的雇员分为以下若干类: Employee:这是所有员工总的父类.属性:员工的姓名,员工的生日月份。 方法:getSalary(intmonth)
- 云服务器安全组开放所有端口
- Excel二次开发学习笔记——获取某列最后一个非空单元格的行号
- 人文视野中的生态学题库
- empty是什么意思 php,empty是什么意思中文翻译