关于 C++ 的性能
很多地方都质疑 C++ 的性能,认为 C++ 的性能是不如 C 的。不如汇编这是事实,不如 C 是因为你没有正确地使用 C++。在很久以前,我也认为 C++ 的速度不如 C,但现在不这么想了。
在看过 'C++ Generic Programming and the STL' 之后,相信很多人都会打消对 C++ 性能的怀疑,包括我。在书前几章的用 GP 的方法实现了一些 C 函数,一方面在运行效率上完全可以等同于相对的 C 代码;另外,因为使用了 template 仅最后编译的时候才确定类型,在灵活性上远远大于 C。
C++0x 有一份 'Performance TR',“提呈了一个到最基层的硬件的库接口。该 TR 的首要目标是帮助嵌入式系统程序员,同时还驳斥了有关 C++ 代码性能低下以及 C++ 正变得不适合低层任务的流言蜚语。”
我非常欣赏 孟岩 Blog 中的一句话:“别告诉我你的计算机有多快,你很清楚花钱买更‘快’的机器是为了什么”,文章见 http://blog.csdn.net/myan/archive/2001/09/29/1911.aspx,别觉得是偏激,当你掌握 GP 的设计时也会有同样的观点。
当然在了解 GP 之前,你要去感受 C++ 那非同一般的复杂性。C++ 在诞生之际 Stroustrup 做的很多定位是非常合理的,包括“先不考虑扩展语言而是先扩展库”的观点。我在接触 VIM 脚本设计的时候,碰到一些原生函数,我就很纳闷了,它们是从哪来的,还有怎么扩展它们呢?同样的问题在 vbs 和 js 中也出现过。
有书中曾经说到 C++ 越来越底层了,但是下面还有 C——好像出自“不完全”,但是现在的局面很好,我们有 GP 可以提高 C++ 的性能。有人认为运行效率无所谓,那么好,你也没有学 C++ 的必要了。C++ 的 GP 在抽象的同时伴随着运行运行效率的提升,如果你不想了解 GP 的话,用 C++ OOP 的话只是一种精力的浪费。
[原创] 关于 C++ 的性能——初稿,还没有修改,什么意见 pm 偶,谢谢!
- ectotherm
- 帖子: 225
- 注册时间: 2006-05-23 13:35
- 联系:
- SuperWar3Fan
- 帖子: 1263
- 注册时间: 2006-05-20 6:25
- 来自: 山东淄博
- 联系:
- ectotherm
- 帖子: 225
- 注册时间: 2006-05-23 13:35
- 联系:
-
- 帖子: 36
- 注册时间: 2006-08-14 11:40
- ectotherm
- 帖子: 225
- 注册时间: 2006-05-23 13:35
- 联系:
- lvjinhua
- 帖子: 436
- 注册时间: 2006-02-23 14:46
- 来自: 上海
- 联系:
- ectotherm
- 帖子: 225
- 注册时间: 2006-05-23 13:35
- 联系:
- feeling
- 帖子: 175
- 注册时间: 2006-04-29 20:10
- 来自: 北京·昌平
- 联系:
- ectotherm
- 帖子: 225
- 注册时间: 2006-05-23 13:35
- 联系:
必须说的几点:C++ 博大精深,但不表示 C++ 是天才高手们的专利,不用精通 C++ 也可以使用 C++,具体原因参见 Stoustrup 关于 C++09 的一些 FAQ。要精通 C++ 简单地说写 C++ 编译器的人最容易,但并没有人说过要用 C++ 先要精通 C++。很多人不会使用 STL, boost 等等,甚至对 C++ Template 不是非常了解,都用 C++ 做项目(不过会出什么问题就不知道了:))。
C++ 用在 Windows 上也有点“屈才”了。如果用 GP/concept 的方法,不需要用到 COM 来解决类动态加载的问题。但是 m$ 是个企业,它必须搞点东西让效率更低些,让做的东西更复杂(注意,对很多人来说的“简单”),这样它才能赢取更多的利润。
所以 C++ 社区非常看好 C++09,它在标准中强调地引入了 concept 关键字。
C++ 用在 Windows 上也有点“屈才”了。如果用 GP/concept 的方法,不需要用到 COM 来解决类动态加载的问题。但是 m$ 是个企业,它必须搞点东西让效率更低些,让做的东西更复杂(注意,对很多人来说的“简单”),这样它才能赢取更多的利润。
所以 C++ 社区非常看好 C++09,它在标准中强调地引入了 concept 关键字。