是的他们可以。在Linux内核中,它们被定义为
#define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x), 0)
__builtin_expect宏是使用分支预测的特定于GCC的宏;它们告诉处理器条件是否可能为真,以便处理器可以在分支的正确“侧”上预取指令。
您应该将定义包装在ifdef中,以确保在其他编译器上进行编译:
#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
如果将其用于正确的分支预测,它将一定为您提供优化。



