设为首页 加入收藏

TOP

MoreEffectiveC++之效率
2014-11-23 20:15:03 】 浏览:304
Tags:MoreEffectiveC 效率


  事实上,效率可不是一个开玩笑的事情。一个太大或太慢的程序它们的优点无论多么引人注目都不会为人们所接受。本来就应该这样。软件是用来帮助我们更好地工作,说运行速度慢才是更好的,说需要32MB内存的程序比仅仅需要16MB内存的程序好,说占用100MB磁盘空间的程序比仅仅占用50MB磁盘空间的程序好,这简直是无稽之谈。而且尽管有一些程序确是为了进行更复杂的运算才占用更多的时间和空间,但是对于许多程序来说只能归咎于其糟糕的设计和马虎的编程。


  在用C++写出高效地程序之前,必须认识到C++本身绝对与你所遇到的任何性能上的问题无关。如果想写出一个高效的C++程序,你必须首先能写出一个高效的程序。太多的开发人员都忽视了这个简单的道理。是的,循环能够被手工展开,移位操作(shift operation)能够替换乘法,但是如果你所使用的高层算法其内在效率很低,这些微调就不会有任何作用。当线性算法可用时你是否还用二次方程式算法 你是否一遍又一遍地计算重复的数值 如果是的话,可以毫不夸张地把你的程序比喻成一个二流的观光胜地,即如果你有额外的时间,才值得去看一看。


  本章的内容从两个角度阐述效率的问题。第一是从语言独立的角度,关注那些你能在任何语言里都能使用的东西。C++为它们提供了特别吸引人的实现途径,因为它对封装的支持非常好,从而能够用更好的算法与数据结构来替代低效的类实现,同时接口可以保持不变。


  第二是关注C++语言本身。高性能的算法与数据结构虽然非常好,但如果实际编程中代码实现得很粗糙,效率也会降低得相当多。潜在危害性最大的错误是既容易犯又不容易察觉的错误,濒繁地构造和释放大量的对象就是一种这样的错误。过多的对象构造和对象释放对于你的程序性能来说就象是在大出血,在每次建立和释放不需要的对象的过程中,宝贵的时间就这么流走了。这个问题在C++程序中很普遍,我将用四个条款来说明这些对象从哪里来的,在不影响程序代码正确性的基础上如何消除它们。


  建立大量的对象不会使程序变大而只会使其运行速度变慢。还有其它一些影响性能提高的因素,包括程序库的选择和语言特性的实现(implementations of language features)。在下面的条款中我也将涉及。


  在学习了本章内容以后,你将熟悉能够提高程序性能的几个原则,这些原则可以适用于你所写的任何程序。你将知道如何准确地防止在你的软件里出现不需要的对象,并且对编译器生成可执行代码的行为有着敏锐的感觉。


  俗话说有备无患(forewarned is forearmed)。所以把下面的内容想成是战斗前的准备。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇在未来时态下开发C++程序 下一篇了解C++异常处理的系统开支

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目