zoukankan      html  css  js  c++  java
  • C switch 和if性能优化区别

    if使用优化一般是 知道数据样本分布 例如学生成绩

    int  main()
    {
        int i = 10;
        if (i <= 100 && i>90)
        {
    
        }
        else if(i <80&&i<90)
        {
    
        }
        else if (i < 60 && i < 80)
        {
    
        }
        //如此类推
        return 0;
    }

    那么60分到80分就是最多的这个时候分支条件应该是最先判断的

    int  main()
    {
        int i = 10;
        if (i < 60 && i < 80)
        {
    
        }
        else if(i <80&&i<90)
        {
    
        }
        else if (i <= 100 && i > 90)
        {
    
        }
        //如此类推
        return 0;
    }

    可以通过对数据样本的细分把if条件判断最优化

    switch 就是数组取值 效率也是最高的。这里也有编译器优化

    int  main()
    {
        int i = 10;
        switch (i/10)
        {
        case 10:break;
        case 9:break;
        case 8:break;
        case 7:break;
        case 6:
        case 5:
        case 4:
        case 3:
        case 2: break;
        }
        //如此类推
        return 0;
    }

    运行一下这里执行看一下汇编

    找到左花最后操作jmp 一个地址 里面有存放的case 下标

    0x00234F0C 这个地址去看他的内存

     一共9个就是case 下标地址就和数组取值一样

     

     当你的标识不是连续时 最大小值差值不超过12 就是执行此优化 所以在使用时可以考虑下标参数的优化 不知道区别就去看汇编指令对比

    从此山高路远,纵马扬鞭。愿往后旅途,三冬暖,春不寒,天黑有灯,下雨有伞。此生尽兴,不负勇往。
  • 相关阅读:
    Java 重写(Override)与重载(Overload)
    Java 继承
    Java 异常处理
    Java Scanner 类
    Java 流(Stream)、文件(File)和IO
    Java 方法
    Java 正则表达式
    Beta冲刺——代码规范、冲刺任务与计划
    Beta冲刺——凡事预则立
    Beta冲刺——问题总结博客(事后诸葛亮和组员交换事宜)
  • 原文地址:https://www.cnblogs.com/feizianquan/p/14669715.html
Copyright © 2011-2022 走看看