內(nèi)存池存在的意義就是效率,減少程序?qū)ο到y(tǒng)的請求。我所知道的內(nèi)存池技術(shù)有兩種:
一種是PoolFactory,可以這樣稱呼吧,本質(zhì)是一個(gè)內(nèi)存分配器模板,由模板的具體類型決定分配單位的大小。也就是說一個(gè)具體的分配器只負(fù)責(zé)分配一種尺寸的內(nèi)存塊,通常分配器都是和程序中的類相綁定的。如代碼
class? SomeClass;?? PoolFactory? someClassMemPool(100);
在重載了SomeClass的new操作符后,就由someClassMemPool來分配每個(gè)該類對象的內(nèi)存。
這樣看似乎很帥,因?yàn)榭梢愿鶕?jù)該類對象所出現(xiàn)的最大數(shù)量來進(jìn)行預(yù)分配,而且分配算法相當(dāng)?shù)膬?yōu)美,單鏈表而已。可以局限在于,這個(gè)技術(shù)只能對用戶定義類進(jìn)行分配,對基本類型無能為力,對函數(shù)內(nèi)的分配無能為力(這主要也是針對基本類型)。
另一種技術(shù)是全局的pool,多鏈表的空閑內(nèi)存,從8字節(jié)開始遞增,一直到128字節(jié),有點(diǎn)像STL 的Alloc類。這一技術(shù)關(guān)照的范圍比較齊全,可是維護(hù)內(nèi)存池的代碼卻比較羅嗦,而且不能像PoolFactory那樣預(yù)見應(yīng)該分配多少數(shù)量的塊給各個(gè)尺寸。
Ogre是沒有內(nèi)存池模塊的,有的只是一個(gè)內(nèi)存跟蹤模塊,進(jìn)行泄漏檢測之類的用途。
聊到這里,最后要說的是學(xué)會share現(xiàn)成的代碼,少做重復(fù)的工作。如果是剛學(xué)習(xí)的人,自然是練習(xí)基礎(chǔ)代碼多多益善,但是對于已經(jīng)有能力做組合的人,百度一下吧,這樣的代碼是有的,下下來看一下就用了,浪費(fèi)自己的時(shí)間寫一個(gè)是很沒意義的。
posted on 2006-06-10 12:49
LOGOS 閱讀(3891)
評論(5) 編輯 收藏 引用