我有一段代码
for ( ... )
{
if (condition) {
// some code
}
// some more code
}
if
条件和外部的代码大小合适。条件要么总是真的要么总是假的,所以不应该有任何分支预测未命中。在条件总是false
的情况下,if
条件中的代码是否会从指令缓存中删除?有什么方法可以为icache优化这个吗?
答案 0 :(得分:0)
总的来说,我发现做更像这样的事情会更好:
if (condition) {
for ( ... )
{
// some code
}
}
else
{
for (...)
{
// some more code
}
}
如果if clause
确实是一个不变的
如果多次出现这种情况 - 您可以选择包含for循环的函数指针或函子,并在做出决定后调用它:
func = (condition) ? func1 : func2
然后到处拨打func