• 如何优化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、查表
    在程序中一般不进行非常复杂的运算,如浮点数的乘除及开方等,以及一些复杂的
    数学模型的插补运算,对这些即消耗时间又消费资源的运算,应尽量使用查表的方
    式,并且将数据表置于程序存储区。如果直接生成所需的表比较困难,也尽量在启
    了,减少了程序执行过程中重复计算的工作量。
  • 相关阅读:
    iOS--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook等系统服务开发汇总
    iOS-网络爬虫
    iOS-性能优化
    iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据
    深入解析Linux内核及其相关架构的依赖关系
    详解Linux系统中的文件名和文件种类以及文件权限
    Linux系统中使用netcat命令的奇技淫巧
    Linux系统下强大的lsof命令使用宝典
    Linux下多线程下载工具MWget和Axel使用介绍
    Linux下针对路由功能配置iptables的方法详解
  • 原文地址:https://www.cnblogs.com/timssd/p/4078406.html
Copyright © 2020-2023  润新知