加速C ++实践编程实例中的概念今天仍然存在吗?

时间:2008-10-17 15:33:44

标签: c++ performance oop procedural-programming

我被推荐了一本名为:

的书

通过示例加速C ++实践编程 作者:Andrew Koenig和Barbara E. Moo Addison-Wesley,2000 国际标准书号0-201-70353-X

本书的基础是面向对象编程在内存方面非常浪费,并且大多数源代码不应该以这种方式编写,而应该使用所有内联函数调用和过程编程。

我的意思是我知道大多数编程书籍的保质期与牛奶相同,但如果您编写客户端/服务器应用程序(数据库,服务器和所有)(不是设备驱动程序或视频游戏),那么它真的值得难以维护的代码只是为了加速?

或者仅仅让应用程序在客户端的旧机器上运行是否值得?或者能够在一个盒子上运行更多服务器?

6 个答案:

答案 0 :(得分:7)

哇,不。

现代C ++编译器非常出色。大量内存使用更多是设计不佳或大内存数据集的症状。 C ++类所需的开销很小,而且现在确实不是问题。

面向对象编程是一种以这样一种方式编写组件的方式,即它们可以逻辑地将与单个概念相关的动作分组(即,“汽车”的所有动作或“猫”的所有动作)。这并不是说它不能被滥用来编写意大利面条对象,但正如他们所说,你可以用任何语言编写COBOL。

作为另一个例子,现在很有可能并且接受用C ++和对象编写嵌入式软件平台。轻微的速度降低和内存使用量的增加(如果有的话)通过提高可维护性和代码可用性来偿还一千倍。

答案 1 :(得分:7)

我还没有看过这本书,但我很难相信他们写了一本书,“基础......面向对象编程是非常浪费记忆的”(完全披露:Andy& Barbara是他们的朋友)矿)。

Andy绝不会说OOP会浪费内存。他会说一种特定的算法或技术是浪费的,并且在某些情况下可能会建议采用较少的OO方法,但是,他会首先认为,作为一般规则,OO设计不会浪费任何其他风格节目。

OO设计浪费的论点很大程度上来自于C ++“hello world”程序的EXE往往比C“hello world”程序的EXE更大。这主要是因为iostreams的printf更大(但是,iostreams会做得更多)。

答案 2 :(得分:2)

C ++和OOP本身并不是低效的,但我已经看到许多C ++程序以比同等C程序更低效的方式执行操作。最大的罪魁祸首通常是由于个别对象而不是 malloc 同时发生了大量的内存分配。类似地,多态性和虚函数很好,但它们确实会产生一些C ++程序员不知道的开销。对象的分段构造也可能比上述 malloc ed结构数组的一个脏的 memset 慢得多。

我的猜测是,对于大多数应用程序,在现代计算机上,这不是一个真正的问题。鉴于C ++还包括所有C作为子集,在情况需要时也没有什么可以阻止你混合和匹配范例。较新的堆处理程序也比早期的MS工作更好,并且是bg帮助。

答案 3 :(得分:2)

  

本书的基础是Object   面向对象编程非常重要   浪费记忆力,而且最多   源代码不应该写这个   相反,你应该使用所有   内联函数调用和过程   编程。

我想说这是the book的一个简化的总结。

简而言之,为了回答标题问题,我会继续推荐这本书和其中包含的概念。

我怀疑这个建议更多的是有人不应该为了实现算法而创建一个类,我认为这仍然是一个很好的建议。

答案 4 :(得分:0)

考虑开发人员一小时的成本。

考虑一小时CPU时间的成本。

话虽如此,编码面向对象的性能损失绝对可以忽略不计。特别是考虑到当你的程序计算时,它会计算某些东西 - 这可能更多地取决于所用算法的性质,而不是是否正在使用OOP。

答案 5 :(得分:-1)

有些答案完全忽略了这一点。 C ++中的OOP有很多机会比C语言快得多。我将通过Scott Meyers提供的有效C ++示例,即快速排序比C ++排序慢,因为编译器能够在C ++中轻松内联函数调用,而由于快速排序,它无法在C中执行此操作传递了一个函数指针。

此外,没有什么比c ++更慢,与其他语言不同,任何缓慢都是纯粹的库实现或算法设计。