這周末準(zhǔn)備筆試,正好順路查查STL”被人所詬病的性能問(wèn)題”,然后一直順路查到內(nèi)存分配優(yōu)化的玩意,(以前在自己的代碼里都是按著ogre用nedmalloc做了個(gè)allocator)自己也懶的profile,就到damedev上搜了點(diǎn),討論這塊的還真有幾個(gè)不錯(cuò)的帖子,所以就做個(gè)整理吧:
1,
http://www.tantalon.com/pete.htm 首先是Pete Isensee的眾多介紹使用C++和STL的文章,里面非常詳盡,許多都是之前在game programming gem(很多可能看過(guò)吧:))和GDC上發(fā)表的文章,雖然很基礎(chǔ),不過(guò)掃一遍復(fù)習(xí)一下也挺有幫助,關(guān)于是否要替換默認(rèn)allocator,pete的觀點(diǎn)也是先確定瓶頸是否是allocation再優(yōu)化,最后他還提供了一套簡(jiǎn)單的stl allocator測(cè)試框架。個(gè)人覺(jué)得,往往STL性能差的更多原因來(lái)自于對(duì)其錯(cuò)誤的使用~
2,
http://www.gamedev.net/topic/567295-time-for-allocating-via-os-or-manually/page__p__4630106__hl__nedmalloc__fromsearch__1#entry4630106 此帖lz自己實(shí)現(xiàn)了一個(gè)heap,結(jié)果實(shí)測(cè)下來(lái)性能和默認(rèn)的new差太多,后面的討論里講到了關(guān)于內(nèi)存分配這塊的優(yōu)化權(quán)衡,即是否在游戲里我們會(huì)有那么多次的new,delete,也討論了一些關(guān)于OS是如何去管理內(nèi)存分配的(操作系統(tǒng)課俺基本為0.。紅黑樹(shù)是王額。。),樓下更貼出了好多關(guān)于內(nèi)存分配的庫(kù)(Intel的TBB)或者鏈接,很適合像我這樣的內(nèi)存小白入門(mén)。
3,
http://www.gamedev.net/topic/587225-nedmalloc-and-pools/page__p__4730726__hl__nedmalloc__fromsearch__1#entry4730726 這個(gè)帖子雖然短但是samoth給出了很有趣的結(jié)論(其實(shí)想想也正常),在他的測(cè)試?yán)飊edmalloc敗給了默認(rèn)的new,delete。用ogre論壇里某人的話說(shuō)就是:nedmalloc是用來(lái)減少內(nèi)存碎片的,在上時(shí)間運(yùn)行的程序上會(huì)有著很好的性能提升(MMORPG~網(wǎng)絡(luò)不懂的人飄過(guò)),做某一些內(nèi)存有局限的平臺(tái)時(shí),可能Boost::Pool或者默認(rèn)的new才是更好的選擇。(當(dāng)然replacement new還是可以用來(lái)調(diào)試的)