zoukankan      html  css  js  c++  java
  • 如何优化C语言代码(程序员必读)

    如何优化C语言代码(程序员必读)
    
    
    5、减少运算的强度
    可以使用运算量小但功能相同的表达式替换原来复杂的的表达式。如下:
    (1)、求余运算。
        a=a%8;
    可以改为:
        a=a&7;
    说明:位操作只需一个指令周期即可完成,而大部分的C编译器的“%”运算均是调
    用子程序来完成,代码长、执行速度慢。通常,只要求是求2n方的余数,均可使用
    位操作的方法来代替。
    
    (2)、平方运算
        a=pow(a,2.0);
    可以改为:
        a=a*a;
    说明:在有内置硬件乘法器的单片机中(如51系列),乘法运算比求平方运算快得多
    ,因为浮点数的求平方是通过调用子程序来实现的,在自带硬件乘法器的AVR单片
    机中,如ATMega163中,乘法运算只需2个时钟周期就可以完成。既使是在没有内置
    硬件乘法器的AVR单片机中,乘法运算的子程序比平方运算的子程序代码短,执行
    速度快。
    如果是求3次方,如:
        a=pow(a,3.0);
    更改为:
        a=a*a*a;
    则效率的改善更明显。
    
    (3)、用移位实现乘除法运算
        a=a*4;
        b=b/4;
    可以改为:
        a=a<<2;
        b=b>>2;
    说明:通常如果需要乘以或除以2n,都可以用移位的方法代替。在ICCAVR中,如果
    乘以2n,都可以生成左移的代码,而乘以其它的整数或除以任何数,均调用乘除法
    子程序。用移位的方法得到代码比调用乘除法子程序生成的代码效率高。实际上,
    只要是乘以或除以一个整数,均可以用移位的方法得到结果,如:
        a=a*9
    可以改为:
        a=(a<<3)+a
    
    6、循环
    (1)、循环语
    对于一些不需要循环变量参加运算的任务可以把它们放到循环外面,这里的任务包
    括表达式、函数的调用、指针运算、数组访问等,应该将没有必要执行多次的操作
    全部集合在一起,放到一个init的初始化程序中进行。
    
    (3)while循环和do…while循环
    用while循环时有以下两种循环形式:
    unsigned int i;
        i=0;
        while (i<1000)
        {
            i++;
       //用户程序
        }
    或:
    unsigned int i;
        i=1000;
        do
        i--;
        //用户程序
        while (i>0);
    在这两种循环中,使用do…while循环编译后生成的代码的长度短于while循环。
    
    7、查表
    在程序中一般不进行非常复杂的运算,如浮点数的乘除及开方等,以及一些复杂的
    数学模型的插补运算,对这些即消耗时间又消费资源的运算,应尽量使用查表的方
    式,并且将数据表置于程序存储区。如果直接生成所需的表比较困难,也尽量在启
    了,减少了程序执行过程中重复计算的工作量。
  • 相关阅读:
    岗位要求与人才匹配
    http://blog.csdn.net/wujunokay/article/details/44783383
    好单位与坏单位
    工作那些事(三十四)杂记
    工作那些事(三十三)面试官的感想和建议
    工作那些事(三十二)由孙悟空的两个故事谈个人与团队
    工作那些事(三十一)如何带好一个项目团队
    工作那些事(三十)如何提升个人能力
    工作那些事(二十九)团队建设和人才招聘
    工作那些事(二十八)项目管理模式:项目型、职能型、矩阵型
  • 原文地址:https://www.cnblogs.com/timssd/p/4078406.html
Copyright © 2011-2022 走看看