【问题标题】:Avoiding Branch Operations in Switch Statements [duplicate]在 Switch 语句中避免分支操作 [重复]
【发布时间】:2015-06-15 01:36:36
【问题描述】:

不是让 switch 语句在一个又一个分支中迭代运行,是否可以让程序集在数组中查找 goto 语句的列表?或者这通常在编译器中进行优化?

这样的优化对于具有常量值的大型 switch 语句非常有帮助。

例如:

switch(test) {
case 1:
// Do something
break;
case 2:
// Do something
break;
}

“优化”:

action_link[] = {action_1, action_2};
goto action_link[test];

action_1:
// Do Something
action_2:
// Do Something

【问题讨论】:

标签: c++ optimization switch-statement


【解决方案1】:

编译器将根据您的优化设置及其关于什么可能构成一个好的跳转表的启发式为您做出此决定。

在许多简单的情况下,编译器可能会决定一个简单的测试和跳转链比等效的跳转表更快或更小。

【讨论】:

    【解决方案2】:

    这确实是您应该对一个体面的编译器所期望的。事实上,switch 语句的限制是基于使其易于转换为“jump table”而不是多个分支。回到过去,FORTRAN 出于同样的原因拥有“计算 GOTO”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多