[原创] 关于 C++ 的性能——初稿,还没有修改,什么意见 pm 偶,谢谢!

软件和网站开发以及相关技术探讨
回复
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
联系:

[原创] 关于 C++ 的性能——初稿,还没有修改,什么意见 pm 偶,谢谢!

#1

帖子 ectotherm » 2006-08-03 13:27

关于 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 的话只是一种精力的浪费。
头像
SuperWar3Fan
帖子: 1263
注册时间: 2006-05-20 6:25
来自: 山东淄博
联系:

#2

帖子 SuperWar3Fan » 2006-08-03 15:23

C++的驾驭需要很高的理论水平,对设计模式、面向对象的优缺点都要由所了解才行,否则还不如用C语言方便呢!其实速度对于C++不是问题,主要是C++本身的设计方面问题!
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
联系:

#3

帖子 ectotherm » 2006-08-03 16:08

所以有人就建议 C++0x 说 C++ 既然已经够复杂了,干脆就做高手的语言算了。但是被 C++ 委员会和 Stroustrup 十分反对。相对之下 C 确实简单很多。如果说到设计问题的话,C++ 你不使用 GP 还不如使用带泛型的 C#2 或者 Java,在面向对象的基础上加入点泛型,那个太简单了。不像 C++ GP 压根就是在泛型上做文章。
janusle
帖子: 36
注册时间: 2006-08-14 11:40

#4

帖子 janusle » 2006-08-26 0:15

GP绝对是C++的精华。可惜啊。大多数国内C++教材和国内高校基本对此只是略提一下,或者根本不提。
以至于很多人认为C++就是C+class的错误想法。唉。
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
联系:

#5

帖子 ectotherm » 2006-08-26 16:48

难得碰到一个了解 GP 的,GP 对我的代码影响是这样的,我每次写一个函数一个类之前,习惯就输入 template <typename _Tp>,当然 template 并不是 GP,但是是 GP 最好的基础。
头像
lvjinhua
帖子: 436
注册时间: 2006-02-23 14:46
来自: 上海
联系:

#6

帖子 lvjinhua » 2006-09-02 16:08

没有五年以上的C++工作经验,不要随便说精通它或了解它。
====
dubuntu-6.06-livecd-i386正式版正式完工!
====
*支持LiveCD硬盘启动
*Linux 2.6.15-23-686
*永中Office 2007
*LumaQQ+OpenQ+cycloneQQ
**N 多的编程及调试工具**
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
联系:

#7

帖子 ectotherm » 2006-09-02 16:13

有 10 年以上都要看情况
头像
feeling
帖子: 175
注册时间: 2006-04-29 20:10
来自: 北京·昌平
联系:

#8

帖子 feeling » 2006-09-21 10:36

没错儿,C++确实博大精深,除非天才,没有十数年的功夫,谁敢说精通?
人生若只如初见,何事秋风悲画扇?
头像
ectotherm
帖子: 225
注册时间: 2006-05-23 13:35
联系:

#9

帖子 ectotherm » 2006-09-21 11:53

必须说的几点: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 关键字。
回复