More Effective C++:4、效率

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_30534935/article/details/102547679

我怀疑一些人在 C++ 软件开发人员身上进行秘密的巴甫洛夫试验,否则为什么当提到 “效率” 这个词时,许多程序员都会流口水。(Scott Meyers 真幽默译者注)


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


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


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


第二是关注 C++ 语言本身。高性能的算法与数据结构虽然非常好,但如果实际编程中代码实现得很粗糙,效率也会降低得相当多。潜在危害性最大的错误是既容易犯而又不容易察觉的错误,濒繁地构造和释放大量的对象就是一种这样的错误。过多的对象构造和对象释放



条款16:谨记 80-20 法则



条款17:考虑使用 lazy evaluation(缓式评估)



条款18:分期摊还预期的计算成本



条款19:了解临时对象的来源



条款20:协助完成 “返回值优化(RVO)”



条款21:利用重载技术(overload)避免隐式类型转换(implict type conversions)



条款22:考虑以操作符复合形式(op=)取代其独身形式(op)



条款23:考虑使用其他程序库



条款24:了解 virtual functions、multiple inheritance、virtual base classes、runtime type identification 的成本

猜你喜欢

转载自blog.csdn.net/qq_30534935/article/details/102547679
今日推荐