避免在开关语句中进行分支操作
Avoiding Branch Operations in Switch Statements
而不是一个又一个分支运行一个又一个分支的开关语句,是否有让程序集在数组中查找 goto 语句的列表?或者这通常在编译器中进行了优化?
这种优化对于具有常量值的大型开关语句将有很大帮助。
前任:
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
编译器将根据您的优化设置及其关于可能构成良好跳转表的启发式方法为您做出此决定。
在许多简单的情况下,编译器可能会决定朴素的测试和跳转链比等效的跳转表更快或更小。
这确实是你应该对一个像样的编译器所期望的。事实上,switch
语句的限制是基于使其易于转换为"跳转表"而不是多个分支。 回到黎明,FORTRAN出于同样的原因拥有"计算GOTO"。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- IPC使用多个管道和分支进程来运行Python程序
- 对字符串进行位操作
- 如何删除peer if else分支中的冗长句子
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 对字符数组中的元素执行逐位操作
- 如何在directx/c++中进行平移/缩放操作
- 逐位操作的隐式类型转换
- 如何正确地将分支添加到已存在的树中
- 为什么一个向量上的多线程操作很慢
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 如何将分支添加到已存在的TTree:ROOT
- 位移操作和位掩码未检测到重复字符
- 如何进行特定的位操作?
- 仅使用位操作(不使用分支)将16位带符号值约束在0和4095之间
- 避免在开关语句中进行分支操作