C++代码优化Tips

原创 2005年05月24日 11:35:00
看很多关于代码优化的资料,都说代码优化是必要的,但是应该推迟到项目的最后阶段进行。原因很多:
1) 过早的优化容易引入bug,一个慢但是bug-free的程序总比快但是总crash的程序好;
2) 当今硬件性能今非昔比。不过对一个在PC上运行的程序可以说只能在XXX主频以上的机器上才能运行,但是在某些项目中,比如手机,硬件环境是fixed的,只能优化代码来迁就CPU了。
3) 在迭代开发中,现阶段的优化下一个阶段会被打破,还不如不优化,省得浪费。

不过还是有几点优化策略可以边开发边实施,这几点也算是程序员的基本功:
1) 函数声明中复杂类参数为传递引用而不是传值,这样可以避免调用函数时的copy constructor的调用,
void foo(SomeClass x, int y);
可以优化为
void foo(const SomeClass &x, int y);
对primitive类型(int, float, double等),声明为引用没有什么意义。

2) 变量直到使用时才创建,和C语言不多,一个函数体内用到的变量,没有必要在函数体开始声明,所以C++代码中应该养成用一个变量时才声明的习惯; 但是,如果一个对象在一个循环中被使用,最好还是在循环之外声明初始化它,以免被反复初始化。
for (....)
{
    SomeClass obj;
    ....
}
可优化为
SomeClass obj;
for (...)
{
    ...;
}

3) 初始化和声明同时进行。
SomeClass obj; // default constructor is called
obj = xyz; // operator = is called
优化为
SomeClass obj =  xyz; //only copy constructor is called

4) 在构造函数中使用初始化list
SomeClass::SomeClass(int x)
{
    foo = x;
}
优化为
SomeClass::SomeClass(int x)
: foo(x)
{
}

5) 使用+=,避免用+。
Foo foo1, foo2;
foo1 = foo1 + foo2;
优化为
Foo foo1, foo2;
foo1 += foo2;
可以避免一个临时变量的产生,如果Foo为一个复杂类的话,效果明显。

6) 使用++x,避免用x++
和上面一条一样,可以避免出现零时变量。

我还听说copy constructor效率比operator = 高,我做了一个实验,循环666666666次,在P4 2.8G的机器上,只有一个int成员的简单类copy construcotor实际上比operator =还慢一秒,我想这两个形式的overhead差别很小,而且和编译器有关,可以忽略不计。


http://www.tantalon.com/pete/cppopt/main.htm上有一个C++代码从设计到编译器优化的介绍,很系统。



C++代码优化Tips

看很多关于代码优化的资料,都说代码优化是必要的,但是应该推迟到项目的最后阶段进行。原因很多:1) 过早的优化容易引入bug,一个慢但是bug-free的程序总比快但是总crash的程序好;2) 当今硬...
  • qwent
  • qwent
  • 2007年05月20日 14:57
  • 405

代码优化工具

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 http://www.chedong.com/tech/indent_tools.html关键词:pretty p...
  • black_ben
  • black_ben
  • 2006年03月17日 09:07
  • 6151

编译原理过程简述及中间代码优化

一、编译过程图示如下:词法分析作用:找出单词 。如int a=b+c; 结果为: int,a,=,b,+,c和; 语法分析作用:找出表达式,程序段,语句等。如int a=b=c;的语法分析结果为in...
  • qq_34417408
  • qq_34417408
  • 2017年09月28日 17:21
  • 332

项目开发之代码优化

web编程,代码优化问题是一个值得探讨的问题。
  • u012466304
  • u012466304
  • 2015年12月05日 23:59
  • 972

Android代码优化工具

1.前言:在我们平时项目开发中,经常会写一些不严谨的代码或者一些比较低级的错误代码,但是这些错误往往很难被发现,这样就导致了我们的项目中会隐藏了很多影响性能甚至是导致闪退的错误代码,于是许多响应的检测...
  • yulyu
  • yulyu
  • 2017年02月10日 19:53
  • 6540

Python代码优化及技巧笔记(一)

这里是记录一些本人在开发过程中遇到的一些细节问题,与君共勉。
  • u013761665
  • u013761665
  • 2016年02月25日 17:21
  • 1621

java代码优化六大原则

单一职责代码优化第一步,单一职责原则 (Single Responsibility Principle)。对于一个java类,应该仅有一个引起它变化的原因,也就是说,一个类中,应该是一组相关性很高的函...
  • bunny1024
  • bunny1024
  • 2017年05月29日 20:35
  • 2388

图像优化---平方根计算优化

本文介绍两个关于平方根计算的快速方法,跟大家分享一下!
  • bravebean
  • bravebean
  • 2016年05月13日 09:17
  • 585

浅析代码优化——编译器优化原理

开篇 相信有过编码经验的人都知道,程序的正常运行,只是最基本的要求。更多的,还要考虑程序的性能,运行效率,组织结构,和重用性等等。 今天将简单的讨论一下如何优化程序性能。 要写出高效的程序,可能...
  • John_ToStr
  • John_ToStr
  • 2016年08月25日 14:57
  • 911

c编程之代码优化总结

let me introduce some programing skills to make our c codes more  optimized Integers We should use u...
  • wuheshi
  • wuheshi
  • 2015年10月29日 14:25
  • 453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++代码优化Tips
举报原因:
原因补充:

(最多只允许输入30个字)