1. 程式人生 > >如何減少頻繁分配記憶體(malloc或者new)造成的記憶體碎片?

如何減少頻繁分配記憶體(malloc或者new)造成的記憶體碎片?

http://www.coder51ad.pub/article/724635.html

記憶體池(Memory Pool)是一種記憶體分配方式。 通常我們習慣直接使用new、malloc等API申請分配記憶體,這樣做的缺點在於:由於所申請記憶體塊的大小不定,當頻繁使用時會造成大量的記憶體碎片並進而降低效能。記憶體池則是在真正使用記憶體之前,先申請分配一定數量的、大小相等(一般情況下)的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊不夠再繼續申請新的記憶體。這樣做的一個顯著優點是儘量避免了記憶體碎片,使得記憶體分配效率得到提升。


(1)針對特殊情況,例如需要頻繁分配釋放固定大小的記憶體物件時,不需要複雜的分配演算法和多執行緒保護。也不需要維護記憶體空閒表的額外開銷,從而獲得較高的效能。

(2)由於開闢一定數量的連續記憶體空間作為記憶體池塊,因而一定程度上提高了程式區域性性,提升了程式效能。
(3)比較容易控制頁邊界對齊和記憶體位元組對齊,沒有記憶體碎片的問題。
(4)當需要分配管理的記憶體在100M一下的時候,採用記憶體池會節省大量的時間,否則會耗費更多的時間。
(5)記憶體池可以防止更多的記憶體碎片的產生
(6)更方便於管理記憶體