PHP源码之UNEXPECTED和EXPECTED
来源:互联网 发布:淘宝wap流量是什么 编辑:程序博客网 时间:2024/06/06 04:00
在看PHP源码的过程中, 总是无数次看到这两个宏, 一直不太清楚这两个宏的作用. 今天闲来无事, 认真研究了一下, 这两个宏定义在zend_portability.h
.
代码片断:
#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
如果定义了PHP_HAVE_BUILTIN_EXPECT
这个宏, 就会采用gcc
的内建函数__builtin_expect
来进行分支预测, 因为现在的CPU都是流水线式的,可以一次性预读好几条指令, 通过分支预测来预先读取下一条指令, 增加代码的执行效率.
if (EXPECTED(x > 0)) { // do something} else { // do something2}
如果x > 0
是大概率的, 那么应该使用EXPECTED
, 这样处理器会预读//do something
的代码指令, 如果x > 0
是小概率的, 那么应该使用UNEXPECTED
, 这样处理器会预读//do something2
的代码指令.
阅读全文
0 0
- PHP源码之UNEXPECTED和EXPECTED
- Hql连接查询的两个错误(Path expected for join!和unexpected token on)
- Unexpected row count: 0 expected: 1
- WebService异常Unexpected wrapper element ... found. Expected ...
- WebService异常Unexpected wrapper element ... found. Expected ...
- php源码之strip_tags
- org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1
- org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1
- NHibernate报错“Unexpected row count: 2; expected: 1”
- Unexpected character ('<' (code 60)): expected a valid value ...
- unexpected element (uri:"", local:"prescDrug"). Expected elements 错误
- org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1
- Vue之Unexpected token
- PHP源码阅读之源码目录结构
- PHP之源码目录结构
- PHP源码分析之HashTable
- PHP之源码目录结构
- asp源码和php源码如何使用
- PT与PX区别
- Sql Server 给表与字段添加描述
- 设计模式六大原则——依赖倒置原则
- Best Time to Buy and Sell Stock II
- springboot整合druid并开启监控
- PHP源码之UNEXPECTED和EXPECTED
- python pandas 组内排序、单组排序、标号
- Maven详解
- iOS集成微信支付功能
- vim的标记 取消 设置 更改 显示
- python中quests模块的简单应用
- (JAVA)数列分段
- IDEA调试本地Hadoop程序
- 【JavaScript设计模式】创建型设计模式--简单工厂、工厂方法、抽象工厂