GCC编译器支持用于定义可能的和不太可能的macros的__builtin_expect语句。 例如。 #define likely(expr) __builtin_expect(!(expr), 0) #define unlikely(expr) __builtin_expect((expr), 0) 是否有与Microsoft Visual C编译器等效的语句?
我一直在挖掘Linux内核的一些部分,并发现这样的调用: if (unlikely(fd < 0)) { /* Do something */ } 要么 if (likely(!err)) { /* Do something */ } 我find了他们的定义: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) 我知道他们是为了优化,但他们是如何工作的? 使用它们可以预期性能/尺寸会下降多less? 至less在瓶颈代码(当然是在用户空间),这是否值得麻烦(并且可能丢失可移植性)。