c&c++程序优化几个建议
2014-03-07 10:46
337 查看
第一:记住,代码写完后一定要做一下系统优化,无论上面是否这样要求,但是这点很重要,是一种态度,当然优化可以借助各种工具如IBM和INTEL系列的优化工具,一般80%的时间被20%的代码所占用。
第二:如果你所在公司,对程序性能优化不重视,那么就请跳槽吧。
第三:要知道你所用编译器是怎么去优化多维数组访问的,如A[i][j]->A[i][j+1] 和A[i][j]->A[i+1][j]的访问速度对不同的编译器会有明显的速度差异,在里面涉及到cache block击中问题。
第四:关注多核处理器对浮点运算的处理方式。
第五:减少局部栈变量。我们知道任何系统给的栈空间的大小极为吝啬的,一般是1-4MB左右。如果栈变量过多,那么会导致一部分栈变量存在register里面,这会影响函数调用速度。
第六:尽量减少函数参数个数,如果不需要返回,就不要返回,减少栈深度。
第七:尽量用pass-by-reference 和指针传递参数,避免不必要的复制。
第八:尽量避免使用cast操作,这会产生一个temp变量,挤占register的空间,影响I./O效率。
第九:声明C++类的时候避免使用赋值构造
第十:正确写出轻量级的构造函数,如用A():a(0){}代替A(){a=0;}
第十一:尽量用位运算代替四则运算
第十二:谨慎使用函数跳转表
第十三:对自己定义的类,尽量用+= -= \= *= 代替+- * /
第十四:尽量延迟局部变量的声明和初始化
第十五:如果不影响计算的话,用prefix ++代替postfix++,对于用户自己定义的类,这两个操作符都要定义,防止客户误用
第十六:使用泛型编程看起来很酷,但是主流编译器对他的优化是有限的,尽量避免使用。
第十七:在计算过程过程中,避免动态内存操作。
第十八:搞清楚你硬件cache大小
第十九:避免不必要的初始化
第二十:尽量提前结束loop
第二十一:用数学公式去简化你的计算,如不要SB到用循环或者递归去计算等差数列的前N项和
第二十二:递归尽量少用,虽然很美,但是这回消耗本来就不富裕的栈空间
第二十三:尽量不要用虚函数。这会增加类的大小
第二十四:浮点计算和整形计算的速度没有你想的差距那么大,现在CPU都支持浮点运算,准备使用定点化计算的时候最好ray trace一下。综合考虑空间和时间上的效率
第二:如果你所在公司,对程序性能优化不重视,那么就请跳槽吧。
第三:要知道你所用编译器是怎么去优化多维数组访问的,如A[i][j]->A[i][j+1] 和A[i][j]->A[i+1][j]的访问速度对不同的编译器会有明显的速度差异,在里面涉及到cache block击中问题。
第四:关注多核处理器对浮点运算的处理方式。
第五:减少局部栈变量。我们知道任何系统给的栈空间的大小极为吝啬的,一般是1-4MB左右。如果栈变量过多,那么会导致一部分栈变量存在register里面,这会影响函数调用速度。
第六:尽量减少函数参数个数,如果不需要返回,就不要返回,减少栈深度。
第七:尽量用pass-by-reference 和指针传递参数,避免不必要的复制。
第八:尽量避免使用cast操作,这会产生一个temp变量,挤占register的空间,影响I./O效率。
第九:声明C++类的时候避免使用赋值构造
第十:正确写出轻量级的构造函数,如用A():a(0){}代替A(){a=0;}
第十一:尽量用位运算代替四则运算
第十二:谨慎使用函数跳转表
第十三:对自己定义的类,尽量用+= -= \= *= 代替+- * /
第十四:尽量延迟局部变量的声明和初始化
第十五:如果不影响计算的话,用prefix ++代替postfix++,对于用户自己定义的类,这两个操作符都要定义,防止客户误用
第十六:使用泛型编程看起来很酷,但是主流编译器对他的优化是有限的,尽量避免使用。
第十七:在计算过程过程中,避免动态内存操作。
第十八:搞清楚你硬件cache大小
第十九:避免不必要的初始化
第二十:尽量提前结束loop
第二十一:用数学公式去简化你的计算,如不要SB到用循环或者递归去计算等差数列的前N项和
第二十二:递归尽量少用,虽然很美,但是这回消耗本来就不富裕的栈空间
第二十三:尽量不要用虚函数。这会增加类的大小
第二十四:浮点计算和整形计算的速度没有你想的差距那么大,现在CPU都支持浮点运算,准备使用定点化计算的时候最好ray trace一下。综合考虑空间和时间上的效率
相关文章推荐
- 给出c&c++程序优化的几个建议,希望对你有帮助
- 改善C++程序的建议:语法篇1<从C继承而来的特性>
- 改善C++ 程序的150个建议学习之建议10:优化结构体中元素的布局
- 改善C++ 程序的150个建议学习之建议26:用引用代替指针
- C++其他几个常见操作程序
- 基于TI C6000系列DSP的C/C++程序优化技术
- 关于小话C语言集合贴,C 语言常见问题集,c语言-优化C代码常用的几招,高效程序的秘密_hacker's delight读书笔记
- C++老手也要注意的几个"小"问题
- .NET程序的性能要领和优化建议
- C++编译优化之RVO(Return Value Optimization) &&C++直接初始化与赋值初始化的区别
- C\C++代码优化的27个建议
- .NET程序的性能要领和优化建议
- 编写高质量代码:改善C++程序的150个建议(十七)
- c&c++反汇编与逆向分析学习笔记(5)--加法的求值过程和编译器优化
- 在Eclipse中运行C++程序出现"Launch failed. Binary not foud"和"Program file not Specified"的问题
- C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- 给11级的C++考试建议&非官方作业提交方式
- 与性能优化有关的几个程序
- 改善C++ 程序的150个建议学习之建议20:使用memcpy()系列函数时要足够小心
- C\C++代码优化的27个建议