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


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

  • 相关阅读:
    流程控制语句
    lminus
    TCL create list from file
    DFT 问答 III
    DFT 问答 II
    DFT 问答 I
    猜字符小游戏
    用户模式构造
    基元线程同步构造
    七大原则,24种设计模式
  • 原文地址:https://www.cnblogs.com/dengwenwu/p/8966181.html
Copyright © 2020-2023  润新知