1. 程式人生 > >C++技術問題總結-第8篇 STL內存池是怎麽實現的

C++技術問題總結-第8篇 STL內存池是怎麽實現的

lists ng- 碎片 -m heap 策略 自管理 blog watermark

STL內存池機制,使用雙層級配置器。第一級採用malloc、free,第二級視情況採用不同策略。

這樣的機制從heap中要空間,能夠解決內存碎片問題。


1.內存申請流程圖
簡要流程圖例如以下。

技術分享
2.第二級配置器說明
第二級配置器目的解決小型區塊造成的內存碎片問題。


使用自由鏈表(free-list)技巧。主動將不論什麽小額區塊的內存需求量上調至8的倍數。如需求30,則上調至32。
free-list節點結構
union obj
{
union obj* free_list_link;
char client_data[];


};
有16個free-lists。各自管理大小分別為8、16、24、32、40、48、56、64、72、80、88、96、104、112、120、128 bytes的小額區塊。
申請流程例如以下。

技術分享

釋放流程例如以下。

技術分享

C++技術問題總結-第8篇 STL內存池是怎麽實現的