转换是否同样糟糕?

Mik*_*ren 5 language-agnostic optimization performance compiler-optimization branch-prediction

我在StackOverflow上读到了这个

if(someCondition)
{
    someCode();
}
else
{
    alternateCode();
}
Run Code Online (Sandbox Code Playgroud)

由于易受分支错误预测的影响,效率可能很低(例如,请参阅此问题).

所以是一个switch构造,例如,

switch (someCondition)
{
    case (someCase):
        something();
        break;
    case (otherCase):
        someOtherInstructions();
        break;
    default:
        defaultAction();
        break;
}
Run Code Online (Sandbox Code Playgroud)

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

Ros*_*son 4

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

  • Switch 语句不一定会编译为条件分支(想想跳转表)。 (2认同)