C++程序性能优化
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
缓存字符串的长度
不必要的memset
8)
字节对齐
移位与乘除2
性能热点用汇编实现
4.
9)
性能问题通常体现在四个方面:CPU、内存、磁盘、网络几个方面。解决方法可以是修改代码甚至程序结构以更充分的利用现有资源,也可以是增加相应的硬件以增加资源供给。
10)
Quantify
Quantify是一个专业的性能分析工具,它能对函数的调用次数、运行时间进行排序,并提供了很容易操作的界面,为性能优化时的首选工具。在Unix/Linux下,如果没有Quantify,还可以用tprof/gprof协助分析问题,可以起到类似的效果,只是由于是基于字符的程序,因而使用起来没有Quantify直观。
本文列举了从设计到编码的一些规则与注意事项,希望能给C/C++程序开发者提供性能优化方面的参考。根据二八元则,80%的程序性能集中体现在20%的代码上,因而关键是要找出这20%的代码,并将其优化。(lzTODO名言)
程序的性能问题贯穿了从设计到编码的整个过程,前期20%的努力,将减少后期80%的工作,因而设计的初期完全不考虑性能问题也是不正确的。一个好的设计,将使得后面的代码优化涉及范围大大缩小,并且由于代码的低耦合性,改动代码造成的影响也大为减少,可以减少后期的性能优化投入。
虽然
软件的性能优化贯穿了设计与编码的整个过程,本文也将从设计与编码两个层次对性能优化进行分析。本文还将从CPU、内存、磁盘、网络四个方面描述性能问题分析的过程。
2.
1)
控制流与数据流
减少不必要的模块
2)
多线程程序
锁的粒度、各种锁/信号量的性能对比
共享内存通信
降低灵活性以获取高性能。
减少不必要的重复判断(SHTTP/HTTP)
其它工具
像windows的任务管理器、性能监视器、Filemon等工具,HP-Unix下的glance、HP-Unix/Linux下的top、AIX下的topas、以前Unix/Linux下的vmstat、sar、iostat等工具,熟练掌握的话将对性能问题的迅速分析定位与解决起到很好的辅助作用。
5.
“法无定法,然后知非法法也”,需要特别指出的是:性能优化应该针对程序的特性来进行。比如频繁启动型程序,如IE、Explorer等用户常用的界面程序,每天要重启成百上千次,这些程序则要关注启动时的性能,尽量地使程序初始化的工作减少;而对于服务器程序,启动后长期不重启,那么就要把耗时的操作尽量在初始化的时候完成,以提高后期提供服务时的响应速度。
3)
好的接口给予使用者充分的灵活性
4)
Linux内存管理,数量小时使用链表
3.
5)
减少new/delete或malloc/free操作
减少换页
减少文件打开与关闭操作
减少文件读写次数(减少系统调用)
6)
消除重复运算
循环中的运算
最忙的循环放在里面
7)
if与case语句
构造与析构
宏与内联函数
迟缓型计算
减少临时变量
C++应用程序Baidu Nhomakorabea能优化
PERFORMANCE OPTIMIZATION OF C++ APPLICATION
[关键词]C++、应用程序、性能
[Key Words]C++、Application、performance
1.
在硬件资源昂贵的时代,编程人员非常注重程序的性能,以期望用尽可能少的硬件资源完成尽可能多的事情。随着科技的发展,摩尔定律的魔力使得硬件资源已越来越便宜,速度也越来越快,似乎性能已不是编程人员所需关注的事情了。然而在一个竞争与发展的时代,软件的功能越来越复杂,用户的操作体验越来越重要,而且竞争越来越激烈,谁能以更优势的价格,更好的操作体验,完成更多更复杂的事情,谁就将在激烈竞争中胜出。因而软件的性能优化必将一直是软件领域所要关注的内容之一。
不必要的memset
8)
字节对齐
移位与乘除2
性能热点用汇编实现
4.
9)
性能问题通常体现在四个方面:CPU、内存、磁盘、网络几个方面。解决方法可以是修改代码甚至程序结构以更充分的利用现有资源,也可以是增加相应的硬件以增加资源供给。
10)
Quantify
Quantify是一个专业的性能分析工具,它能对函数的调用次数、运行时间进行排序,并提供了很容易操作的界面,为性能优化时的首选工具。在Unix/Linux下,如果没有Quantify,还可以用tprof/gprof协助分析问题,可以起到类似的效果,只是由于是基于字符的程序,因而使用起来没有Quantify直观。
本文列举了从设计到编码的一些规则与注意事项,希望能给C/C++程序开发者提供性能优化方面的参考。根据二八元则,80%的程序性能集中体现在20%的代码上,因而关键是要找出这20%的代码,并将其优化。(lzTODO名言)
程序的性能问题贯穿了从设计到编码的整个过程,前期20%的努力,将减少后期80%的工作,因而设计的初期完全不考虑性能问题也是不正确的。一个好的设计,将使得后面的代码优化涉及范围大大缩小,并且由于代码的低耦合性,改动代码造成的影响也大为减少,可以减少后期的性能优化投入。
虽然
软件的性能优化贯穿了设计与编码的整个过程,本文也将从设计与编码两个层次对性能优化进行分析。本文还将从CPU、内存、磁盘、网络四个方面描述性能问题分析的过程。
2.
1)
控制流与数据流
减少不必要的模块
2)
多线程程序
锁的粒度、各种锁/信号量的性能对比
共享内存通信
降低灵活性以获取高性能。
减少不必要的重复判断(SHTTP/HTTP)
其它工具
像windows的任务管理器、性能监视器、Filemon等工具,HP-Unix下的glance、HP-Unix/Linux下的top、AIX下的topas、以前Unix/Linux下的vmstat、sar、iostat等工具,熟练掌握的话将对性能问题的迅速分析定位与解决起到很好的辅助作用。
5.
“法无定法,然后知非法法也”,需要特别指出的是:性能优化应该针对程序的特性来进行。比如频繁启动型程序,如IE、Explorer等用户常用的界面程序,每天要重启成百上千次,这些程序则要关注启动时的性能,尽量地使程序初始化的工作减少;而对于服务器程序,启动后长期不重启,那么就要把耗时的操作尽量在初始化的时候完成,以提高后期提供服务时的响应速度。
3)
好的接口给予使用者充分的灵活性
4)
Linux内存管理,数量小时使用链表
3.
5)
减少new/delete或malloc/free操作
减少换页
减少文件打开与关闭操作
减少文件读写次数(减少系统调用)
6)
消除重复运算
循环中的运算
最忙的循环放在里面
7)
if与case语句
构造与析构
宏与内联函数
迟缓型计算
减少临时变量
C++应用程序Baidu Nhomakorabea能优化
PERFORMANCE OPTIMIZATION OF C++ APPLICATION
[关键词]C++、应用程序、性能
[Key Words]C++、Application、performance
1.
在硬件资源昂贵的时代,编程人员非常注重程序的性能,以期望用尽可能少的硬件资源完成尽可能多的事情。随着科技的发展,摩尔定律的魔力使得硬件资源已越来越便宜,速度也越来越快,似乎性能已不是编程人员所需关注的事情了。然而在一个竞争与发展的时代,软件的功能越来越复杂,用户的操作体验越来越重要,而且竞争越来越激烈,谁能以更优势的价格,更好的操作体验,完成更多更复杂的事情,谁就将在激烈竞争中胜出。因而软件的性能优化必将一直是软件领域所要关注的内容之一。