我偶然发现一个 #define
,他们使用 __builtin_expect
。
内置功能:
long __builtin_expect (long exp, long c)
您可以使用
__builtin_expect
为编译器提供分支 一般来说,你应该使用实际的预测资料 配置文件反馈(-fprofile-arcs
) ,就像程序员一样 出了名的不善于预测他们的程序实际执行情况。 但是,在一些应用程序中很难收集这些数据。返回值是
exp
的值,它应该是一个整数 内置表达式的语义是,预期 例如:if (__builtin_expect (x, 0)) foo ();
表示我们不期望调用
foo
,因为我们期望x
为零。
那么为什么不直接使用:
if (x)
foo ();
而不是使用 __builtin_expect
的复杂语法?