STL空間配置器分析

2021-08-20 13:34:55 字數 893 閱讀 4649

今天閱讀了《stl原始碼剖析》了解了一下stl中空間配置器的原理,一下進行分析總結

stl中對於空間的配置與釋放 std::alloc

在stl中物件構造前的空間配置和物件釋放後的空間釋放,是由

stl_alloc.h負責的,下面來分析一下原始碼,理解它的原理

在這之前需要了解一下malloc()的原理,記憶體分配原理malloc實現機制

首先我們知道無論是c還是c++,其實記憶體的申請與釋放都是由malloc( )和free()來完成的,但malloc()在申請空間時,對於小片記憶體的申請,也就是小於128k的記憶體申請是有缺陷的,會造成「外碎片」(與後面說到的內碎片區分)的問題,以及頻繁向系統申請小塊記憶體,效率非常低

所以總結來說,為什麼需要空間配置器?

解決記憶體碎片問題

頻繁向系統申請小塊空間,效率低

1、一級&二級空間配置器

考慮了記憶體碎片的問題,設計了兩種配置器,

其實我們發現其實二級空間配置器,主要就是對小空間申請的優化,主要的優化方法,也就是用乙個記憶體池和乙個自由鍊錶實現的,所以我們主要來研究一下這兩個東西是如何來優化小空間申請的記憶體碎片問題的

1)一級空間配置器

原始碼中,一級空間配置器的申請空間與釋放空間就是封裝的malloc和free,malloc失敗,記憶體不足時,調oom_malloc,進行記憶體釋放

二級空間配置器

STL 空間配置器

stl有6大元件 容器 演算法 迭代器 仿函式 配接器 分配器。它們之間的密切關係是stl的精髓所在,容器用來存放資料,而容器存在的前提是要有分配器給它分配記憶體,接下來需要實現演算法,迭代器便作為演算法來對容器資料操作的橋梁,演算法可以使用仿函式完成不同的策略變化,配接器可修飾或套接仿函式。說了麼...

STL 空間配置器

stl空間配置器的底層原理 維護了乙個狹義的記憶體池,並且用乙個自由鍊錶來維護該記憶體池。該自由鍊錶比較類似於雜湊的開鏈法的儲存結構。源 pragma once using namespace std define throw bad alloc cerr out of memory endl ex...

STL空間配置器

一級空間配置器 ifndef malloc alloc template h define malloc alloc template h if 0 include define throw bad alloc throw bad alloc elif defined throw bad alloc...