內存分配器采用內存池的管理方式,位於用戶程序層和內核層之間。它響應用戶的分配請求,向操作系統申請內存,然後返回給用戶程序。
為了保持高效的分配,分配器通常會提前向操作系統申請壹塊內存。當用戶程序申請和釋放內存時,分配器會對內存進行管理,並通過壹些算法策略決定是否將其返回給操作系統。這樣做最大的好處就是可以避免用戶程序頻繁調用系統分配內存,讓用戶程序更高效快速的使用內存。
個人對ptmalloc的內存分配原理不是很了解,這裏就不教斧頭遊泳了。有興趣的同學可以看看華庭《glibc內存管理ptmalloc源代碼分析》最後的鏈接。
關於如何選擇這三種內存分配器,大部分網上資料都推薦放棄glibc的原生ptmalloc,使用jemalloc或tcmalloc作為默認分配器。因為ptmalloc的主要問題其實是內存浪費、內存碎片和鎖導致的性能問題,所以jemalloc和tcmalloc更適合內存碎片和多線程。
目前jemalloc應用於Firefox、FaceBook等。,並且是MariaDB、Redis、Tengine默認推薦的內存分配器,而tcmalloc則應用於WebKit、Chrome等。