而不是在分支之后运行迭代遍历分支的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
答案 0 :(得分:1)
编译器将根据您的优化设置及其可能构成良好跳转表的启发式方法为您做出此决定。
在许多简单的情况下,编译器可能会认为一个天真的测试和跳转链比同等的跳转表更快或更小。
答案 1 :(得分:1)
这确实是你应该期待的一个体面的编译器。事实上,switch
声明的局限性是基于使其易于转换为“jump table”而非多个分支。早在时间的早期,FORTRAN出于同样的原因就有了“计算GOTO”。