在代码中经常看到LIKELY和UNLIKELY这样的宏,查看它们的定义如下,可以发现想要弄懂这两个宏的含义,就是要明白 __builtin_expect 的意思
#define LIKELY(expr) (__builtin_expect (!!(expr), 1))
#define UNLIKELY(expr) (__builtin_expect (!!(expr), 0))
网上也有很多关于 __builtin_expect 的介绍,我还是直白一点吧,就是在代码中不论是碰到LIKELY(expr)还是UNLIKELY(expr),统统看做是expr就好了!!
区别就是,对于LIKELY(expr)而言,expr往往更可能是一个非零值,而对于UNLIKELY(expr)而言,expr的值往往会是零。
参考:
1. https://blog.csdn.net/qq_22660775/article/details/89028258