假设我有一些函数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
评估指令缓存,还是仅在计算结果之后才应用分支预测?IsTrue
IsTrue