这周末准备笔试,正好顺路查查STL”被人所诟病的性能问题”,然后一直顺路查到内存分配优化的玩意,(以前在自己的代码里都是按着ogre用nedmalloc做了个allocator)自己也懒的profile,就到damedev上搜了点,讨论这块的还真有几个不错的帖子,所以就做个整理吧:
1,
http://www.tantalon.com/pete.htm 首先是Pete Isensee的众多介绍使用C++和STL的文章,里面非常详尽,许多都是之前在game programming gem(很多可能看过吧:))和GDC上发表的文章,虽然很基础,不过扫一遍复习一下也挺有帮助,关于是否要替换默认allocator,pete的观点也是先确定瓶颈是否是allocation再优化,最后他还提供了一套简单的stl allocator测试框架。个人觉得,往往STL性能差的更多原因来自于对其错误的使用~
2,
http://www.gamedev.net/topic/567295-time-for-allocating-via-os-or-manually/page__p__4630106__hl__nedmalloc__fromsearch__1#entry4630106 此帖lz自己实现了一个heap,结果实测下来性能和默认的new差太多,后面的讨论里讲到了关于内存分配这块的优化权衡,即是否在游戏里我们会有那么多次的new,delete,也讨论了一些关于OS是如何去管理内存分配的(操作系统课俺基本为0.。红黑树是王额。。),楼下更贴出了好多关于内存分配的库(Intel的TBB)或者链接,很适合像我这样的内存小白入门。
3,
http://www.gamedev.net/topic/587225-nedmalloc-and-pools/page__p__4730726__hl__nedmalloc__fromsearch__1#entry4730726 这个帖子虽然短但是samoth给出了很有趣的结论(其实想想也正常),在他的测试里nedmalloc败给了默认的new,delete。用ogre论坛里某人的话说就是:nedmalloc是用来减少内存碎片的,在上时间运行的程序上会有着很好的性能提升(MMORPG~网络不懂的人飘过),做某一些内存有局限的平台时,可能Boost::Pool或者默认的new才是更好的选择。(当然replacement new还是可以用来调试的)