【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题

时间:2022-06-17 00:25:16

对于这个问题自己是比较清楚的,在分支比较多时,switch-case的效率肯定比if-else的要高许多,其原理类似于我们在优化某些程序时使用查表来代替算法计算一样。

如果想进一步深究的话,可以查看GCC编译之后的汇编代码。

这里有两篇Blog可以参考一下,致谢两位作者。

1. switch与ifelse的效率问题

https://blog.csdn.net/kehui123/article/details/5298337

2. if else和switch的效率

https://blog.csdn.net/spy19881201/article/details/5851792

先记录下这两篇博文中的结论:

1. switch和if-else相比,由于使用了BinaryTree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true.

2. 编译器编译switch与编译if...else...不同,对switch-case会生成一个跳表,不管有多少case,都直接跳转,不需要逐个比较查询,注意这一部分内容其实在深入理解计算机系统这本书上有提及的。

3. 由于swtich-case在编译处理时要生成跳表,会占用较多的代码空间,当case常量分布范围较大但实际的有效值又比较少的时候,switch-case的空间利用率会降低。

4.  switch-case仅限于处理分支条件结果为常量的情况,对于较复杂的条件需要多做程序上的处理,在灵活性上不如if-else。