這周末準備筆試,正好順路查查STL”被人所詬病的性能問題”,然后一直順路查到內存分配優(yōu)化的玩意,(以前在自己的代碼里都是按著ogre用nedmalloc做了個allocator)自己也懶的profile,就到damedev上搜了點,討論這塊的還真有幾個不錯的帖子,所以就做個整理吧:
1,http://www.tantalon.com/pete.htm
首先是Pete Isensee的眾多介紹使用C++和STL的文章,里面非常詳盡,許多都是之前在game programming gem(很多可能看過吧:))和GDC上發(fā)表的文章,雖然很基礎,不過掃一遍復習一下也挺有幫助,關于是否要替換默認allocator,pete的觀點也是先確定瓶頸是否是allocation再優(yōu)化,最后他還提供了一套簡單的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差太多,后面的討論里講到了關于內存分配這塊的優(yōu)化權衡,即是否在游戲里我們會有那么多次的new,delete,也討論了一些關于OS是如何去管理內存分配的(操作系統(tǒng)課俺基本為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還是可以用來調試的)
1,http://www.tantalon.com/pete.htm
首先是Pete Isensee的眾多介紹使用C++和STL的文章,里面非常詳盡,許多都是之前在game programming gem(很多可能看過吧:))和GDC上發(fā)表的文章,雖然很基礎,不過掃一遍復習一下也挺有幫助,關于是否要替換默認allocator,pete的觀點也是先確定瓶頸是否是allocation再優(yōu)化,最后他還提供了一套簡單的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差太多,后面的討論里講到了關于內存分配這塊的優(yōu)化權衡,即是否在游戲里我們會有那么多次的new,delete,也討論了一些關于OS是如何去管理內存分配的(操作系統(tǒng)課俺基本為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還是可以用來調試的)