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