__builtin_expect 作用

1. 在http-parser源码中看到下面实现:

#ifdef __GNUC__
# define LIKELY(X) __builtin_expect(!!(X), 1)
# define UNLIKELY(X) __builtin_expect(!!(X), 0)
#else
# define LIKELY(X) (X)
# define UNLIKELY(X) (X)
#endif

2. 理解

CPU的实现是流水线方式,即取指--执指--输出结果,第一条指令在执行的过程中,第二条指令可能已经完成了取指。但是如果第一条指令的执行结果使得程序发生了跳转,取到的第二条指令相当于做了无用功。因为此时要执行跳转位置的指令。使用__builtin_expect指令,如LIKELY宏,是告诉CPU X的值更大概率是1。在执行下一次取指操作的时候,取 执行结果是1成立的情况下的下一条指令。这样减少了CPU做无用功的次数,提高程序执行效率。

 

参考:

https://blog.csdn.net/shuimuniao/article/details/8017971

你可能感兴趣的:(【C】)