1、具体定义如下,gcc 2.96以上版本支持
#define likely(x) __biltin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
2、效率提升原理
#define likely(x) __builtin_expect(!!(x), 1)也就是说明x==1是“经常发生的”或是“很可能发生的”,!!(x)这个操作会把 x 转化成bool值,即0或1.。
使用likely ,执行if后面语句的可能性大些,编译器将if{}是的内容编译到前面, 使用unlikely ,执行else后面语句的可能性大些,编译器将else{}里的内容编译到前面。这样有利于cpu预取,提高预取指令的正确率,因而可提高效率。