会不会有代码这两个片段之间的任何明显的速度差异? 天真,我认为第二个片段会更快,因为分支指令遇到少了很多,但在另一方面,分支预测应该解决这个问题。 还是会具有尽管预测的模式有明显的开销? 假设没有条件移动指令使用。
片段1:
for (int i = 0; i < 100; i++) {
if (a == 3)
output[i] = 1;
else
output[i] = 0;
}
片段2:
if (a == 3) {
for (int i = 0; i < 100; i++)
output[i] = 1;
} else {
for (int i = 0; i < 100; i++)
output[i] = 0;
}
我不打算优化这些情况我自己,但我想知道更多关于分支机构的开销,甚至可预测的模式。