考虑以下代码。布尔值
predicate
的真或假取决于用户。所以我们无法判断哪一个更有可能。
if (predicate)
logicA()
else
logicB()
不过有一个好处,
predicate
一旦设置,就保证不能再修改了。
我的问题是:
logicA()
。predicate
已初始化并且不会再改变?我认为这对他们来说是一项艰巨的任务。所以我想知道你是否能想出一些绝妙的主意?如果你的谓词从运行假值切换到运行真值,那么分支预测器应该会错过前几个真值,然后切换到准确的预测。
如果这太昂贵,那么您可以使用函数指针作为您调用的东西,并在用户执行该操作时重新分配它一次。但这可能会影响其他优化(例如内联),所以这确实是任何人的猜测。
我会测量目标架构。