c語言記憶體池介紹與應用

2021-08-04 14:21:39 字數 636 閱讀 7265

為什麼要使用記憶體池(why)?

我們知道,在使用c語言開發程式時,程序會對記憶體進行動態的分配和釋放,那麼,如果在乙個程式裡頻繁的分配和釋放記憶體會帶來兩點不好的結果:

(1)頻繁分配和釋放記憶體會進行多次系統呼叫,增加系統開銷,影響程式效率;

(2)頻繁分配和釋放記憶體會產生許多記憶體碎片,降低記憶體的使用率,降低記憶體分配的效率;

因此,為了解決上述兩點弊端,我們在開發程式時,如果需要頻繁地分配使用記憶體,可以採用記憶體池的方法,降低記憶體分配和釋放的開銷.

記憶體池使用的api介紹

pool_t _pool_new_heap(int size);//建立大小為size的新的記憶體池。

void *pool_malloc(pool_t, int size);//從指定記憶體池中分配大小為size的記憶體空間,這些空間會在記憶體池釋放時,被自動的釋放。

int pool_size(pool_t p);//記憶體池的大小,返回記憶體池中所有記憶體塊的大小總和

void pool_free(pool_t p);//釋放記憶體池,這會導致所有記憶體被釋放,同時記憶體池本身也被釋放

。。。 。。。

與記憶體池相關的資料結構

具體的實現見blog:

C語言記憶體管理(記憶體池)

c語言可以使用 alloc 從棧上動態分配記憶體。malloc free或者 new delete 大量使用會造成記憶體碎片,這種碎片形成的機理如下 記憶體碎片一般是由於空閒的記憶體空間比要連續申請的空間小,導致這些小記憶體塊不能被充分的利用,舉個例子 如果有100 個單位的連續空閒記憶體,那麼先申...

記憶體池應用

記憶體池技術詳解裡面已經很清楚地講解了寫乙個記憶體池的方法了。而這裡我結合遊戲開發中的使用,說說記憶體池的應用。首先不管怎麼去應用,如果我們不去手動釋放占有的資源,那麼我們的記憶體總有用完的那麼一天。我們的記憶體池 class memorypool node next null node next ...

記憶體池 C 記憶體池

c c 下記憶體管理是讓幾乎每乙個程式設計師頭疼的問題,分配足夠的記憶體 追蹤記憶體的分配 在不需要的時候釋放記憶體 這個任務相當複雜。1.呼叫malloc new,系統需要根據 最先匹配 最優匹配 或其他演算法在記憶體空閒塊表中查詢一塊空閒記憶體,呼叫free delete,系統可能需要合併空閒記...