游戏开发论坛

 找回密码
 立即注册
搜索
楼主: death

大家写engine的,用stl还是自己写?

[复制链接]

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2005-7-5 11:47:00 | 显示全部楼层

Re: Re:大家写engine的,用stl还是自己写?

xpertsoft: Re:大家写engine的,用stl还是自己写?

不过偶有个疑问:  既然STL不是为游戏服务的,那么MFC是为游戏服务的吗?
在非Windows下开发游戏怎么用MFC?


STL和MFC当然都不是为游戏服务的!!!
我想这个你应该很清楚,非windows下当然不能使用MFC。
如果你是一个语文老师,你还会在黑板上写C++代码吗??

我觉得我非常同意 fujingqiu 的观点。

首先写通俗易懂的代码其实是一个程序员的好习惯。通俗易懂其中就包含了使用权威的库,这样别人在维护你的代码时才会更快上手。

其次,我做过很多profile,发现游戏中大量的时间都是渲染,所以按照80-20规则,往往最后才需要考虑是否要写一个数据结构库,一开始就考虑无疑是给自己增加困难。除非现有库满足不了功能,注意是功能而不是效率,我才会考虑在一开始就自己写一个数据结构库,而99%的情况下,stl可以满足你。

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2005-7-5 11:59:00 | 显示全部楼层

Re: Re:大家写engine的,用stl还是自己写?

kevin_lethe: Re:大家写engine的,用stl还是自己写?

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...



扯出MFC就是想告诉你,不管是游戏开发还是企业开发,使用现有的库都是很正常平且是一种好习惯。

同样,我见过很多游戏框架都是使用MFC(包括我先前公司制作的好几款游戏),而且工作良好,倒是那些没有使用MFC的游戏程序员经常抱怨为什么我们的框架不是MFC搭建的。

我唯一使用WCHAR*而不使用std::string的主要原因是WCHAR*更容易控制,是在做游戏的自画界面EditBox等的时候。我不知道你遵不遵从大师的话:高手尽量少使用指针,而多使用类。想想为什么智能指针会被纳入标准库,并且在boost或者loki中会被大师们细心编写呢?

随便说一句,如果你觉得memcpy有开销,那么建议你不要使用C++,因为C++中存在着大量的无用的开销,其实这和memcpy有什么区别呢?别忘记C++中最影响效率的因素是什么。

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-7-5 12:14:00 | 显示全部楼层

Re:大家写engine的,用stl还是自己写?

其实也部分属于个人习惯问题

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-7-5 12:23:00 | 显示全部楼层

Re:大家写engine的,用stl还是自己写?

扯到这里,我也说说心得,关于std::string
std::string中是没有memcpy的,如果出现memcpy是程序或者编译器额外生成的

std::string的开销最大的只有一个地方,就是每次字符串的长度变大的时候,std::string检查到如果地方不够了就会挪位置。挪位置的方法很简单就是每次生成一个新的缓冲,删除旧的缓冲,几乎所有变长度的东西都有这个毛病。

如果你要很安全的使用wchar * 或者char *,实现std::string那样的功能,写出来的代码不会比STL少多少。

其实在使用字符串的难点在于字符串总是一会变长一会变短,我们通常就申请一个稍微大点的,使用std::string的时候,如果你愿意也可以一开始就分配一个大一点的缓冲,这样就不会一会生成新的,然后删除旧的了。

同时我们在使用std::string作为参数的时候最好加上&引用标志符,避免不必要的参数副本拷贝。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2005-7-5 12:55:00 | 显示全部楼层

Re:大家写engine的,用stl还是自己写?

我写了一个RCString,和STL的string一样,只不过是带引用计数的功能

9

主题

266

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
发表于 2005-7-5 15:41:00 | 显示全部楼层

Re: Re: Re:大家写engine的,用stl还是自己写?

kypck: Re: Re:大家写engine的,用stl还是自己写?


所谓出生牛犊不怕虎,呵呵,装老鸟的话,就不要什么东西都一棒子打死,更不要进行人生攻击。打倒别人证明自己高明是很可笑的。


被你打败了,我正好是初生牛犊。
那么请您继续。:)

修改内容如下:
  kypck 要不要向我这个晚辈介绍下自己呢?我比较喜欢认识老鸟。还有指出我哪里进行人生打击,把什么一棒子打死?

9

主题

266

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
发表于 2005-7-5 15:46:00 | 显示全部楼层

Re:大家写engine的,用stl还是自己写?

“扯出MFC就是想告诉你,不管是游戏开发还是企业开发,使用现有的库都是很正常平且是一种好习惯。”

谢谢。
不过我就是有个不好的习惯,不随便使用那些我非要用它不可的组件。

9

主题

266

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
发表于 2005-7-5 16:15:00 | 显示全部楼层

Re: Re: Re:大家写engine的,用stl还是自己写?

疯子阿虹: Re: Re:大家写engine的,用stl还是自己写?



STL和MFC当然都不是为游戏服务的!!!
我想这个你应该很清楚,非windows下当然不能使用MFC。
如果你...


注意是功能而不是效率。

我对这句话比较感兴趣。大学时候很多教材中都有这样的说法,老教授和前辈们也这样说。可是到我头上就发现一些东西出问题。
拿去年一件事情来说,当时我还在用std::string 实现一个脚本解析引擎。但是后来发现同一个字符串有可能在内存中存在N个,比如 "int" "function" "temp"等等。于是就想到把所有的script 载入,接着tokenlize 然后根据每个token的hash(key, 字符串地址)来保存,脚本所牵涉的字符串分配的时候首先计算字符串的哈西值,然后检索hash_table ,如果已经存在,直接返回这个字符串地址,如果不存在,则再创建。 字符串hash的算法复杂度很小很小,且脚本约定全部使用小写,连tolower,toupper也都免了。最后的结果也证明,这样做效率很高。而且引发一个思路,这样分配的同内容字符串地址在运行期是唯一的,那么对资源的管理,确保资源读取的唯一性上也很方便,一般是判断资源文件名是否已经存在,后来可以就直接根据字符串地址的hash(资源路径字符串地址 ---> 资源对象)来判断资源是否已经读取。地址的hash是再快不过的了。

问题来了。我需要修改整个项目中所有的std::string , 所有的new char  所有的delete p(字符串指针) 操作! 所有的str+str2 这样的东东。。。。。

以致最后开始怀疑“注意是功能而不是效率。”的观点。所以本人现在的想法是,如果能尽快找到有效率的思路,那么最好还是考虑效率,尤其是那些比较基础的,会被很多子系统用到的函数或对象。这些在你profiling 的时候是很难分析出来的,而且往往也不会产生瓶劲,只是用得多了,也会丢掉很多宝贵得时钟周期。

9

主题

266

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
发表于 2005-7-5 20:12:00 | 显示全部楼层

Re:大家写engine的,用stl还是自己写?

我这几天灌水灌得实在太疯狂。。。
论文要答辩,自己都还没开始写。
女朋友吵着要散步,一散就是围学校一圈,路上还不能抽烟,回家就累爬下。。。。
白天还要去公司,项目要赶进度,毛主席说,要打持久战。。。

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-7-6 09:24:00 | 显示全部楼层

Re: Re: Re: Re:大家写engine的,用stl还是自己写?

kevin_lethe: Re: Re: Re:大家写engine的,用stl还是自己写?



注意是功能而不是效率。

我对这句话比较感兴趣。大学时候很多教材中都有这样的说法,老教授和前辈们...

但是这个Hash表在stl里面是有的呀。并且我觉得把常用的字符串作成常量速度更快。这也说明,怎样用类库比怎样编类库更重要。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 15:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表