內存池存在的意義就是效率,減少程序對系統的請求。我所知道的內存池技術有兩種:
一種是PoolFactory,可以這樣稱呼吧,本質是一個內存分配器模板,由模板的具體類型決定分配單位的大小。也就是說一個具體的分配器只負責分配一種尺寸的內存塊,通常分配器都是和程序中的類相綁定的。如代碼
class? SomeClass;?? PoolFactory
在重載了SomeClass的new操作符后,就由someClassMemPool來分配每個該類對象的內存。
這樣看似乎很帥,因為可以根據該類對象所出現的最大數量來進行預分配,而且分配算法相當的優美,單鏈表而已。可以局限在于,這個技術只能對用戶定義類進行分配,對基本類型無能為力,對函數內的分配無能為力(這主要也是針對基本類型)。
另一種技術是全局的pool,多鏈表的空閑內存,從8字節開始遞增,一直到128字節,有點像STL 的Alloc類。這一技術關照的范圍比較齊全,可是維護內存池的代碼卻比較羅嗦,而且不能像PoolFactory那樣預見應該分配多少數量的塊給各個尺寸。
Ogre是沒有內存池模塊的,有的只是一個內存跟蹤模塊,進行泄漏檢測之類的用途。
聊到這里,最后要說的是學會share現成的代碼,少做重復的工作。如果是剛學習的人,自然是練習基礎代碼多多益善,但是對于已經有能力做組合的人,百度一下吧,這樣的代碼是有的,下下來看一下就用了,浪費自己的時間寫一個是很沒意義的。