关于 PHP 内核中 __builtin_expect 的解释

转自:http://blog.csdn.net/fb408487792/article/details/49925259

Zend/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

main/php-config.h

/* Whether the compiler supports __builtin_expect */
#define PHP_HAVE_BUILTIN_EXPECT 1

解释:

# define EXPECTED(condition)   __builtin_expect(!!(condition), 1)
# define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)

// !!(condition)真假变量 非非得真的逻辑运算,以0或1来达到预判
// if(EXPECTED(condition)) 等价于 if(condition)
// if(UNEXPECTED(condition)) 也等价于 if(condition)
// __builtin_expect((condition),1) 表示 condition 的值为真的可能性更大。
// __builtin_expect((condition),0) 表示 condition 的值为假的可能性更大。

编译器在编译过程中,会将可能性更大的代码紧跟着前面的代码,从而减少指令跳转。###

你可能感兴趣的:(关于 PHP 内核中 __builtin_expect 的解释)