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


    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的小額區塊。
    申請流程例如以下。

    釋放流程例如以下。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM