`
izuoyan
  • 浏览: 9224169 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

代码优化经验总结(3)

阅读更多


4, 函数的优化

(1)Inline函数

在C++中,关键字Inline可以被加入到任何函数的声明中。这个关键字请求编译器用函数内部的代码替换所有对于指出的函数的调用。这样做在两个方面快于函数调用:第一,省去了调用指令需要的执行时间;第二,省去了传递变元和传递过程需要的时间。但是使用这种方法在优化程序速度的同时,程序长度变大了,因此需要更多的ROM。使用这种优化在Inline函数频繁调用并且只包含几行代码的时候是最有效的。

(2)不定义不使用的返回值

函数定义并不知道函数返回值是否被使用,假如返回值从来不会被用到,应该使用void来明确声明函数不返回任何值。

(3)减少函数调用参数

使用全局变量比函数传递参数更加有效率。这样做去除了函数调用参数入栈和函数完成后参数出栈所需要的时间。然而决定使用全局变量会影响程序的模块化和重入,故要慎重使用。

(4)所有函数都应该有原型定义

一般来说,所有函数都应该有原型定义。原型定义可以传达给编译器更多的可能用于优化的信息。

(5)尽可能使用常量(const)

尽可能使用常量(const)。C++ 标准规定,如果一个const声明的对象的地址不被获取,允许编译器不对它分配储存空间。这样可以使代码更有效率,而且可以生成更好的代码。

(6)把本地函数声明为静态的(static)

  如果一个函数只在实现它的文件中被使用,把它声明为静态的(static)以强制使用内部连接。否则,默认的情况下会把函数定义为外部连接。这样可能会影响某些编译器的优化——比如,自动内联。


(7) 尽量减少中间变量(编译器多数情况下会帮你优化).

如, obj o= getsomeObj();

Aobj ao = getAsomeObj(o);

Int a = ao.value;

If(a==9)

可以写成if((getAsomeObj(getsomeObj()).value) == 9);


5,计算优化

(1), 求模(余)运算优化,如用a=a&7代替 a=a%8; 位操作只需一个指令周期即可完成,而大部分的C编译器的“%”运算均是调用子程序来完成,代码长、执行速度慢。(通常,只要求是求2n方的余数,均可使用位操作的方法来代替)

(2), 平方或多次方运算优化, 如用a*=a;代替a=pow(a, 2.0); 注意多次方效率更明显,在有内置硬件乘法器的单片机中(如51系列),乘法运算比求平方运算快得多,因为浮点数的求平方是通过调用子程序来实现的,在自带硬件乘法器的AVR单片机中,如ATMega163中,乘法运算只需2个时钟周期就可以完成。既使是在没有内置硬件乘法器的AVR单片机中,乘法运算的子程序比平方运算的子程序代码短,执行速度快

(3),尽量用位移来代替乘法和除法. 如用a=(a<<3)+a代替a=a*9

(4) 尽量避免不必要的整数除法, 整数除法是整数运算中最慢的,所以应该尽可能避免。一种可能减少整数除法的地方是连除,这里除法可以由乘法代替。这个替换的副作用是有可能在算乘积时会溢出,所以只能在一定范围的除法中使用。如用m = i / (j * k) 代替m = i / j / k

分享到:
评论

相关推荐

    C代码优化经验总结.doc

    C代码优化经验总结.doc

    编译原理代码优化概述

    ### 编译原理之代码优化概述 #### 一、引言 代码优化是编译原理中的一个重要组成部分,它旨在提高程序的执行效率或减少资源占用。优化的目标通常是在不改变程序逻辑的前提下,使得生成的代码在运行时更快或更节省...

    SQL优化经验总结34条.pdf

    ### SQL优化经验总结34条 #### 一、选择最有效率的表名顺序 - **要点**: 在基于规则的优化器(RBO)中,Oracle解析器从右至左处理FROM子句中的表名。为了提高性能,应将记录条数最少的表放在最后,即作为基础表。...

    代码优化 ppt 文档

    总结来说,代码优化是一个多层次的过程,需要根据具体情况选择合适的优化策略。算法级优化关注算法设计,C语言级优化利用编程语言特性,而汇编级优化则深入到硬件层面。每个层次都有其独特的作用和挑战,恰当的组合...

    java代码重构经验总结

    ### Java代码重构经验总结 在软件开发过程中,代码重构是一项重要的技能,它旨在不改变代码外部行为的前提下,改进其内部结构,从而提升代码质量和可维护性。本文将深入探讨Java代码重构的关键点,涵盖重构原则、...

    JVM优化经验总结Java开发Java经验技巧共15页.p

    【标题】"JVM优化经验总结Java开发Java经验技巧共15页.p" 提供的信息表明,这是一份关于Java开发中的JVM优化经验的详细总结,共有15页的内容。在Java开发过程中,理解并掌握JVM(Java虚拟机)的优化技巧是至关重要的...

    系统移植优化经验总结

    在移植优化的经验总结中,还涉及到了对术语的定义和参考资料的列举,这对于其他项目工作的知识积累和问题解决有着重要的参考价值。例如,“SIP”即Session Initiation Protocol(会话初始协议),它是应用层协议,...

    编译原理试验 中间代码优化 表达式语法分析等

    在编译原理中,中间代码优化...6. **总结与展望**:总结实验经验,对未来工作提出建议和展望。 通过这个试验,学习者不仅可以深入理解编译原理,还能掌握实际编程技巧,为今后从事软件开发或系统优化奠定坚实的基础。

    C6XX优化经验总结_HQ.doc

    【C6XX优化经验总结】 在C6XX处理器的编程过程中,优化是提高程序性能的关键。C6XX系列是TI(德州仪器)推出的高性能数字信号处理器,主要用于嵌入式系统,尤其是在信号处理应用中。本篇文章主要围绕C6XX的程序优化...

    C6000软件优化经验总结

    C6000软件优化是针对德州仪器(TI)C6000系列DSP处理器进行的一种性能提升技术,旨在最大化代码执行效率,减少资源消耗,提高系统响应速度。C6000系列主要包括C62x、C64x、C66x等多个子系列,广泛应用于数字信号处理...

    项目优化总结,经验积累

    "项目优化总结,经验积累" 该资源摘要信息是关于项目优化总结和经验积累的知识点总结。下面是从给定的文件信息中生成的相关知识点: 1. 个人介绍:该部分介绍了作者刘佳伟的个人信息,包括姓名、毕业院校、专业、...

    java代码优化总结1.0版本.zip

    以上只是部分可能涵盖的Java代码优化知识点,实际的"java代码优化总结1.0版本.md"文件可能包含更详细的信息,如具体的代码示例、实战经验分享以及性能测试结果等。通过学习和应用这些知识,开发者可以显著提升Java...

    优化SQL Server数据库的经验总结

    ### 优化SQL Server数据库的经验总结 #### 一、引言 在现代企业的信息化建设中,数据库作为信息系统的核心组件之一,其性能的好坏直接影响着整个系统的响应速度和用户体验。SQL Server作为一款广泛使用的数据库...

    VC编程经验总结源代码

    《VC编程经验总结源代码》是一份集合了Visual C++高级编程技巧与实践的宝贵资源,对于初学者和有经验的开发者来说都是极具价值的学习材料。这份压缩包中包含了一系列的开发代码实例,旨在帮助读者深入理解VC++编程的...

    VC编程经验总结

    在VC编程领域,经验往往比...通过学习和借鉴"VC编程经验总结"中的实践,开发者可以避免常见陷阱,提高工作效率,提升代码质量,更好地应对复杂项目。无论是初学者还是有经验的开发者,这份资料都是一份值得参考的宝藏。

    七天搞定SQL2005千万级别数据记录+数据库优化经验+代码优化+索引优化

    本文将分享一位开发者针对SqlSever2005一千万条以上记录的分页数据库优化经验,包括索引优化和代码优化,帮助读者理解如何应对大规模数据处理中的性能瓶颈。 首先,当数据量达到千万级别时,数据库的性能表现将直接...

    MTK 程序 经验 总结

    在本文中,我们将深入探讨MTK程序开发的经验总结,为新手提供宝贵的指导。 一、MTK平台介绍 MTK平台是MediaTek推出的一系列芯片解决方案,广泛应用于智能手机和平板电脑等移动设备。其特点包括高度集成的硬件模块、...

    鲸鱼算法优化bp神经网络,完整代码,换成自己的数据即可使用

    **鲸鱼算法优化BP神经网络** 鲸鱼算法(Whale Optimization Algorithm, WOA)是一种新型的全局优化算法,灵感来源于鲸鱼捕食的行为。...同时,此案例也提供了对优化算法在机器学习领域应用的深入理解和实践经验。

Global site tag (gtag.js) - Google Analytics