转换是否同样糟糕?

时间:2013-06-03 06:29:26

标签: performance optimization language-agnostic compiler-optimization branch-prediction

我在StackOverflow上读到了使用

if(someCondition)
{
    someCode();
}
else
{
    alternateCode();
}
由于易受分支错误预测的影响,

可能效率低下(例如,参见this question)。

switch - 构造也是如此,例如,

switch (someCondition)
{
    case (someCase):
        something();
        break;
    case (otherCase):
        someOtherInstructions();
        break;
    default:
        defaultAction();
        break;
}

在这方面有什么不同(除了我允许三种可能性的事实)?

1 个答案:

答案 0 :(得分:4)

if语句不是“昂贵的”,条件分支可能是。问题不在于您选择编写的许多不同的高级语句中的哪一个 - {{1 },ifswitchfor。问题在于现代计算机能够很好地执行无条件指令路径,但是当存在决策点时,它们可能会变慢。由于在没有决策点(,条件分支)的情况下你无法做任何有趣的事情,你也可以忽略高级语言构造的选择。