Suv*_*yil 21 c c++ performance switch-statement
据我所读,我可以总结一下,
if/elseif(?)快考虑一下我有300多个开关盒的情况.我知道if/elseif在这个场景中会是一团糟.
但我想知道switch案件在这样的场景中会如何表现?
if/elseif- switch除了实际编写代码和使用分析器之外的比较?我尝试.c使用gcc 4.8.1 -Sswitch来编译带有switch case 的小文件,它看起来像是一个跳转表.我从哪里开始?if/elseif在这种情况下使用是更好/更糟我主要对C/C++的具体细节感兴趣
Mic*_*CMS 23
编译器可能会决定使用跳转表,并在300+的情况下进行大幅改进.
编译器使用决策树等各种技术对分支进行优化.
编译器理解代码越容易越好.并且switch语句对于编译器来说也更具可读性.
从编译器的角度考虑其他问题.它看起来像一个箭头:
- if
- else
- else
- else
- else
Run Code Online (Sandbox Code Playgroud)
您需要评估每个先前的if,以便找到正确的else.
但是,Switch看起来更像一个块:
- case
- case
- case
- case
Run Code Online (Sandbox Code Playgroud)
因此,编译器有时可以确定直接去哪里.
对于你的子弹问题:
它是可扩展的.它很容易被开发人员编写,如果编译器使用跳转表,添加更多的情况不会影响.
由编译器决定使用什么.它可能会选择根本不优化它(但很可能是跳转表).
您可以手动运行循环和安抚时间吗?
使用开关总是更好.在最坏的情况下,交换机将像if/else一样运行.
大多数低端处理器(主要用于嵌入式系统)的编译器并不总是为 switch case 生成跳转表。
如果 case 变量按顺序排列(例如 1,2,3,4...),则编译器首选 switch case 的跳转表实现,但对于 case 变量的随机序列(例如 12,344,565,1,5...) ) 编译器生成与 if-else 代码相同的代码。
有时,由于这个原因,开发人员在向已经正常的代码中添加随机 case 变量时会遇到麻烦,可能会更改该代码段的整个实现,从而导致代码执行时间和代码大小发生重大变化。这些是嵌入式开发人员最关心的问题。
| 归档时间: |
|
| 查看次数: |
2018 次 |
| 最近记录: |