10
Linux内核中可能的/不太可能的宏如何工作,它们的好处是什么?
我一直在研究Linux内核的某些部分,并找到了如下调用: if (unlikely(fd < 0)) { /* Do something */ } 要么 if (likely(!err)) { /* Do something */ } 我找到了它们的定义: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) 我知道它们是为了优化,但是它们如何工作?使用它们会导致多少性能/尺寸下降?至少在瓶颈代码中(当然在用户空间中)值得麻烦(并且可能失去可移植性)。