一、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...