|
|
发表于 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 的时候是很难分析出来的,而且往往也不会产生瓶劲,只是用得多了,也会丢掉很多宝贵得时钟周期。 |
|