【2018.04.27 C与C++基础】关于switch-case及if-…

2018-06-18 03:48:41来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

对于这个问题自己是比较清楚的,在分支比较多时,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。

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:将含有makefile文件的源码加入Eclipse工程

下一篇:毕业回馈-89C51之数码管的使用