STL原始碼分析 Allocator

2022-08-17 16:33:19 字數 524 閱讀 8087

allocator譯為空間配置器而不是記憶體配置器,是因為空間也可以是磁碟或其它輔助介質。

考虛到小型區塊所可能造成的記憶體破碎問題,sgi設計了雙層級配置器,第一級配置器直接使用malloc()和free(),第二級配置器則視情況採用不同的策略:當配置區塊超過128bytes時,視之為「足夠大」,便呼叫第一級配置器;當配置區塊小於128bytes時,視之為「過小」,為了降低額外負擔,便採用複雜的memory pool整理方式,而不再求助於第一級配置器。

記憶體池從記憶體池中取空間給free list使用,是chunk_alloc()的工作。

記憶體基本處理工具

stl定義有五個全域性函式,作用於未初始化空間上。這樣的功能對於容器的實現很有幫助。

分別是用於構造的construct()和用於析構的destroy(),另三個函式是uninitialized_copy(),uninitialized_fill(),uninitialized_fill_n(),分別對應該於高層次函式copy(),fill(),fill_n()。

參考:《stl原始碼剖析》

STL原始碼剖析 空間配置器(allocator)

一般容器都需要一定空間存放資料,allocator就是用來配置空間的,sgi的allocator配置的物件時記憶體。乙個allocator通常包含兩個部分,一是記憶體配置和記憶體釋放 allocate的deallocate 二是物件構造和析構 construct和destory ifndef jja...

stl原始碼剖析讀書筆記之allocator

第二章開始作者定義了乙個簡單的模板類jj allocator,有allocator的所有介面,包括allocator deallocate construct destroy 四個成員函式 但是開啟 stl原始碼中的stl alloc.h,sgi stl用的最多的std alloc並沒有constr...

STL原始碼分析set

include include using namespace std int main set iset ia,ia 5 cout size iset.size endl cout 3 count iset.count 3 endl iset.insert 3 cout size iset.siz...