Fortran中select case语句的标签顺序是否会影响运行性能?
Fortran select case语句性能问题解答
列表项数量对性能的影响
- Fortran语言标准没有对case的列表项数量设置强制上限,实际上限由你使用的编译器决定,目前主流的GCC Fortran、Intel Fortran等编译器的数量上限都很高,完全可以覆盖日常开发的需求。
- 性能变化和编译器的优化策略强相关:
- 如果是连续整数类型的case,编译器通常会优化为跳转表结构,此时匹配耗时是固定常数,和列表项的数量没有关系。
- 如果是字符串、离散非连续数值的case,编译器一般会生成顺序匹配的逻辑,此时列表项越多,平均匹配耗时越长。
列表项顺序对性能的影响
- 对于没有优化为跳转表的case场景,出现频率越高的项放越靠前,代码运行速度越快。
- 你给出的两个写法对比中,
case ('common case', 'rare case', 'very rare case')的运行速度确实会快于case ('very rare case', 'rare case', 'common case')。因为编译器会按你写的顺序逐一匹配列表项,匹配到对应值就直接跳出,不会检查后面的项,高频项放在前面可以大幅减少平均匹配次数。 - 只有当case被编译器优化为跳转表时,列表项的顺序才不会对性能产生任何影响。
内容的提问来源于stack exchange,提问作者John Overington
相关产品推荐
相关产品推荐

