高效编程的一个重要宗旨就是:不停地重新检查程序,在操作中尽量采取高效率的操作和快速的存取对象,尽量减少低效率的操作和缓慢的存取对象!
大家都知道,数据结构和程序的算法是决定程序性能的两大要素!说实话想要写出合理的代码,必须了解编译器是如何生成代码的,以及cpu是如何执行程序的。
- 优化代码框架
- 合理的优化代码结构,减少函数调用层次和嵌套深度,甚至有些函数可以使用内联或define来定义,以减少函数调用所占时间
- 简化函数
- 充分理解函数所要实现的功能,用最简单的方式去实现,去掉冗余的逻辑。
- 优化循环,有些操作可以放到循环外做,不必每次都做
- 选取合适的算法和数据结构
- 通常使用指针比数组要快很多,对于频繁插入删除的操作,使用链表要比使用数组快很多
- 减少运算强度
- 尽量使用位操作代替计算
- 公共子表达式可以提前计算
- 通过查表来换取时间
- 前缀改成后缀, i++改成++i
- 利用操作系统和CPU本身的优势
- 多核和多处理器的某种组合上并行的运算;可以将任务有计划的分配给特定的处理器
- 充分利用操作系统的位宽,尤其是拷贝等操作上,但这个地方要注意字节对齐
- 充分利于CPU的流水
- 编译选项
- 编译器优化:在编译时使用命令行选项 -finline”、“-O1”或者更高级别编译选项时
- 开启编译选项-O2
以上部分原帖:https://blog.csdn.net/chenyq991/article/details/79047741,这里将有更加详细的解释
将记录关于《C程序性能优化-20个实验与达人技巧》的一些记录
1、编译器运作流程
在编译器编译时加上编译选项(-O)可以优化生成的汇编代码
2、指令流水线
3、高速缓存
尽量将变量分配给高速缓存的寄存器中
3、基础优化概括
- 由于CPU内部有若干个加算器,将若干个加法算法并列起来同时计算,变量个数越多,处理时间反而越短!
- 在进行数据乘除的运算时,采用寄存器内数据的移位操作来提高效率
- 在对内存访问时一定要选择合适大方式比如指针。。
- if-else-语句中不成立的条件比成立条件要消耗时间
- 64位操作系统执行函数调用(有无参数)一般都在1.3~1.4纳秒、32位操作系统执行函数调用有参数2.2纳秒,无参数1.3纳秒
- 数据存取
- 字符串操作
- GCC的优化选项
在使用gdb和Eclipse调试工具时无需指定优化选项
- 复杂运算简化:将循环内的乘法运算置换为加法运算的方法
- 整数转换成字符串--利用数字查字符标的方式