假设我有一些函数IsTrue()返回一个bool. 如果程序员决定IsTrue()通常会返回true,她可能会使用 GCC__builtin_expect或类似的东西来加速那些典型情况下的指令。
举以下2个例子:
// example 1
const bool result = IsTrue();
if (__builtin_expect(result, true))
// do something
;
// example 2
if (__builtin_expect(IsTrue(), true))
// do something
;
假设这IsTrue是不平凡的,这些之间有什么区别吗?放在参数列表中是否IsTrue()会导致在知道结果之前__builtin_expect评估指令缓存,还是仅在计算结果之后才应用分支预测?IsTrueIsTrue