STL記憶體分配器 allocator

2021-06-20 23:35:58 字數 1008 閱讀 7489

一、stl泛型容器 與 記憶體管理

1.1 stl泛型容器中隱藏了記憶體管理工作

stl提供了很多泛型容器,如vector,list,map等。程式設計師使用時之關心如何存放物件,不用關心如何管理記憶體。

容器會根據需要自動增長記憶體,在退出其作用域時,也會自動銷毀占有的記憶體。

stl容器巧妙的避開了繁瑣而且容易出錯的記憶體管理工作。

二、stl預設的記憶體分配器

2.1 stl預設的記憶體分配器

隱藏在容器後的記憶體管理工作是通過stl提供的 乙個預設的allocator實現的。

2.2 定製allocator

使用者可以定製自己的allocator,只需要實現allocator模板所定義的介面方法即可,然後通過將自定義的allocator作為模板引數傳遞給stl容器。

建立乙個使用自定義allocator的stl容器物件,如下:

vectorvec;

大多數情況下,stl預設的allocator就已經足夠了。

三、stl預設記憶體分配器實現原理

3.1 分配器原理:兩級分配器

allocator是乙個由兩級分配器構成的記憶體管理器。

1. 當申請的記憶體大小大於128byte時,啟動第一級記憶體分配器,通過malloc直接向系統的堆空間分配。

2. 當申請的記憶體大小小於128byte時,啟動第二級記憶體分配器,從乙個預先分配好的記憶體池中取一塊記憶體交給使用者。

這個記憶體池由16個不同大小(8個倍數,8~128byte)的空閒列表組成,allocator會 申請 的大小(將這個大小round up成8的倍數),從對應的空閒塊列表取頭塊給使用者。

3.2 優點

1.  小物件的快速分配。

2. 避免了記憶體碎片的生成。

STL的記憶體分配器

題記 記憶體管理一直是c c 程式的 關於記憶體管理的話題,大致有兩類側重點,一類是記憶體的正確使用,例如c 中new和delete應該成對出現,用raii技巧管理記憶體資源,auto ptr等方面,很多c c 書籍中都使用技巧的介紹。另一類是記憶體管理的實現,如linux核心的slab分配器,st...

STL的記憶體分配器

分類 c c stl 2011 04 04 18 34 1689人閱讀收藏 舉報list 演算法vector linux核心 byte raii 題記 記憶體管理一直是c c 程式的 關於記憶體管理的話題,大致有兩類側重點,一類是記憶體的正確使用,例如c 中new和delete應該成對出現,用rai...

STL的記憶體分配器

題記 記憶體管理一直是c c 程式的 關於記憶體管理的話題,大致有兩類側重點,一類是記憶體的正確使用,例如c 中new和delete應該成對出現,用raii技巧管理記憶體資源,auto ptr等方面,很多c c 書籍中都使用技巧的介紹。另一類是記憶體管理的實現,如linux核心的slab分配器,st...