為各個容器高效的管理空間(空間的申請與**)的。
為什麼需要空間配置器?stl空間配置器的原理:1.在使用new申請空間時,空間申請與釋放需要使用者自己管理,容易造成記憶體洩漏
2.頻繁向系統申請小塊記憶體塊,容易造成記憶體碎片
3.頻繁向系統申請小塊記憶體,影響程式執行效率
4.直接使用malloc與new進行申請,每塊空間前有額外空間浪費
5.申請空間失敗怎麼應對
6.**結構比較混亂,**復用率不高
7.未考慮執行緒安全問題
空間配置器以128作為小塊記憶體與大塊記憶體的分界線,將空間配置器其分為兩級結構,一級空間配置器處理大塊記憶體(>128),二級空間配置器處理小塊記憶體 (<=128)。
針對大於128位元組的空間。
直接對malloc與free進行了封裝,並增加了c++中set_new_handle思想。
忘記畫上封裝free了,記得有封裝free就行。
針對小於128位元組的小塊記憶體 。
二級空間配置器使用了記憶體池技術,採用雜湊桶的方式來提高使用者獲取空間的速度與高效管理。
記憶體池大致結構:
sgi-stl將使用者申請的記憶體塊向上對齊到了8的整數倍。
如下圖所示:
二級空間配置器工作流程如下:
空間配置器
普通存放資料的原理 需要空間 new new 申請空間 構造物件 new是將malloc重新封裝的,使用一次malloc,在記憶體中除了會開闢所需空間外,還會額外開闢36個位元組 通過這種形式管理空間可以防止越界訪問 普通方式存放資料是存在缺陷的 1.頻繁的向系統索要小的記憶體塊,會產生記憶體碎片。...
STL 空間配置器
stl有6大元件 容器 演算法 迭代器 仿函式 配接器 分配器。它們之間的密切關係是stl的精髓所在,容器用來存放資料,而容器存在的前提是要有分配器給它分配記憶體,接下來需要實現演算法,迭代器便作為演算法來對容器資料操作的橋梁,演算法可以使用仿函式完成不同的策略變化,配接器可修飾或套接仿函式。說了麼...
STL 空間配置器
stl空間配置器的底層原理 維護了乙個狹義的記憶體池,並且用乙個自由鍊錶來維護該記憶體池。該自由鍊錶比較類似於雜湊的開鏈法的儲存結構。源 pragma once using namespace std define throw bad alloc cerr out of memory endl ex...