Tag: 分支预测

我可以在C中使用GCC的__builtin_expect()和三元运算符

GCC手册仅显示了__builtin_expect()放置在’if’语句的整个条件周围的示例。 我还注意到GCC不会抱怨如果我使用它,例如,使用三元运算符,或任何任意积分表达式,即使是未在分支上下文中使用的表达式。 所以,我想知道其实际使用的基本限制是什么。 当它在这样的三元运算中使用时是否会保持其效果: int foo(int i) { return __builtin_expect(i == 7, 1) ? 100 : 200; } 那么这个案子呢: int foo(int i) { return __builtin_expect(i, 7) == 7 ? 100 : 200; } 还有这个: int foo(int i) { int j = __builtin_expect(i, 7); return j == 7 ? 100 : 200; }