stl記憶體池學習(一) 記憶體池初認識

2021-06-28 12:03:34 字數 1190 閱讀 3483

序號

0123

4567

891011

1213

1415

串接區塊816

2432

4048

5664

7280

8896

104112

120128

範圍1-8

9-16

17-24

25-32

33-40

41-48

49-56

57-64

65-72

73-80

81-88

89-96

97-104

105-112

113-120

121-128

幾個過程的思路:

一、申請過程:

code:

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

查詢對應的鍊錶   

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

調整鍊錶   

返回第乙個區塊位址   

else

準備重新填充鍊錶   

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

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

返回第乙個區塊位址   

else

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

返回第乙個區塊位址   

else

直接用malloc()申請記憶體  

二、釋放過程:

code:

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

直接用free()釋放   

else

查詢對應的鍊錶   

**記憶體  

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

code:

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

調整記憶體池起始位置   

返回空間位址   

else

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

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

調整記憶體池起始位置   

返回空間位址   

else

從記憶體池中壓縮記憶體   

收集比size大的空間   

遞迴呼叫,修正nobjs   

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

stl記憶體池學習(一) 記憶體池初認識

序號 0123 4567 891011 1213 1415 串接區塊816 2432 4048 5664 7280 8896 104112 120128 範圍1 8 9 16 17 24 25 32 33 40 41 48 49 56 57 64 65 72 73 80 81 88 89 96 97...

stl記憶體池學習(二) 走近記憶體池

這一節學習基礎知識 所用到的資料結構。首先看記憶體池的介面 code ifndef mem pool h define mem pool h static size t freelist index size t bytes static size t round up size t bytes s...

STL記憶體池講解

簡單說下 設計記憶體池的目的主要是為了解決在一些特殊的場合 比如 網路程式設計時接受資料報 頻繁的建立和銷毀 造成的大量的記憶體碎片和降低效率。在stl的記憶體池中可以看到 它的實現是利用了乙個自由鍊錶陣列 obj free lists 陣列中每個元素都是乙個自由鍊錶的頭指標 它指向乙個由多個記憶體...