ptmalloc、tcmalloc,jemalloc,mimalloc


GNU Libc 的內存分配器(allocator)—ptmalloc,起源於Doug Lea的malloc。由Wolfram Gloger改進得到可以支持多線程。

tcmalloc是Google開發的內存分配器,在Golang、Chrome中都有使用該分配器進行內存分配。有效的優化了ptmalloc中存在的問題。當然為此也付出了一些代價,按下不表,先看tcmalloc的具體實現。

TCMalloc是專門對多線並發的內存管理而設計的,TCMalloc主要是在線程級實現了緩存,使得用戶在申請內存時大多情況下是無鎖內存分配。整個 TCMalloc 實現了三級緩存,分別是ThreadCache(線程級緩存),Central Cache(中央緩存:CentralFreeeList),PageHeap(頁緩存),最后兩級需要加鎖訪問。如圖為內存分配

jemalloc是facebook推出的,目前在firefox、facebook服務器、android 5.0 等服務中大量使用。 jemalloc最大的優勢還是其強大的多核/多線程分配能力. 以現代計算機硬件架構來說, 最大的瓶頸已經不再是內存容量或cpu速度, 而是多核/多線程下的lock contention(鎖競爭). 因為無論CPU核心數量如何多, 通常情況下內存只有一份. 可以說, 如果內存足夠大, CPU的核心數量越多, 程序線程數越多, jemalloc的分配速度越快。

mimalloc是微軟最近開源的一個malloc實現,其實驗數據表明相比於jemalloc、tcmalloc等實現大約快了10%。其通過將空閑塊列表(Free List)進行分片(Sharding)來保證分配的內存有更好的空間的局部性,從而提升性能。


免責聲明!

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



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