記憶體池的理解

2021-08-10 19:28:48 字數 1285 閱讀 6238

掌握記憶體管理對於c++/c程式設計師的重要性。

使用記憶體池的優點有:降低動態申

請記憶體的次數,提公升系統效能,減少記憶體碎片,增加記憶體空間使用率。

記憶體池的分類:

一、不定長記憶體池:

優點:不需要為不同的資料建立不同的記憶體池,缺點是分配出去的記憶體池

不能**到池中(?)。代表有apr_pool,obstack。

二、定長記憶體池:

優點:使用完立即把記憶體歸還池中。代表有loki, boost。

幾個過程的思路:

一、申請過程:

1.if (使用者申請的記憶體不大於128 bytes) 

2.查詢對應的鍊錶 

3.if (對應鍊錶擁有一塊以上的區塊)

4.調整鍊錶 

5.返回第乙個區塊位址 

6.else

7.準備重新填充鍊錶 

8.向記憶體池申請記憶體(指定數量的區塊) 

9.if (記憶體池申請到乙個區塊) 

10.返回第乙個區塊位址 

11.else 

12.調整鍊錶,將區塊串接起來

13.返回第乙個區塊位址 

14.else 

15.直接用malloc()申請記憶體

二、釋放過程:

1.if (使用者釋放的記憶體塊大於128 bytes)

2.直接用free()釋放

3.else 

4.查詢對應的鍊錶

5.**記憶體

三、向記憶體池申請記憶體過程:

1.if (記憶體池空間完全滿足需求量) 

2.調整記憶體池起始位置

3.返回空間位址 

4.else if (記憶體池空間不能完全滿足需求量,但能提供乙個以上的區塊) 

5.計算能夠提供的最大記憶體 

6.調整記憶體池起始位置

7.返回空間位址 

8.else 

9.從記憶體池中壓縮記憶體

10.收集比size大的空間 

11.遞迴呼叫,修正nobjs 

12.再次申請記憶體,可能丟擲異常 

記憶體池 C 記憶體池

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

記憶體池 簡單的記憶體池的實現

當頻繁地用malloc申請記憶體,然後再用free釋放記憶體時,會存在兩個主要問題。第乙個問題是頻繁的分配釋放記憶體可能導致系統記憶體碎片過多 第二個問題是分配釋放記憶體花費的時間可能比較多 這個問題不太明顯 這個時候我們就可以考慮使用記憶體池了。最樸素的記憶體池思想就是,首先你向系統申請一塊很大的...

記憶體池 執行緒池

1 記憶體池是在真正使用記憶體之前,先申請分配一定數量的 大小相等 一般情況下 的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊不夠再繼續申請新的記憶體。這樣做的乙個顯著優點是,使得記憶體分配效率得到提公升。2 執行緒池是一種多執行緒處理形式,處理過程中將任務新...