C SGI STL空間配置器原理

2021-10-08 21:44:47 字數 953 閱讀 7139

為各個容器高效的管理空間(空間的申請與**)的。

為什麼需要空間配置器?

1.在使用new申請空間時,空間申請與釋放需要使用者自己管理,容易造成記憶體洩漏

2.頻繁向系統申請小塊記憶體塊,容易造成記憶體碎片

3.頻繁向系統申請小塊記憶體,影響程式執行效率

4.直接使用malloc與new進行申請,每塊空間前有額外空間浪費

5.申請空間失敗怎麼應對

6.**結構比較混亂,**復用率不高

7.未考慮執行緒安全問題

stl空間配置器的原理:

空間配置器以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...