Go内存分配

分级分配

线程缓存分配(Thread-Caching Malloc, TCMalloc)是用于分配内存的机制,比glibc中的malloc还要快很多。Go语言的内存分配器借鉴了TCMalloc的设计实现高速的内存分配,它的核心理念是使用多级缓存将对象根据大小分类,按照类别实施不同的分配策略。

对象大小

类别 大小
微对象 (0, 16B)
小对象 [16B, 32KB]
大对象 (32KB, +∞)

多级缓存

内存分配器不仅会区别对待大小不同的对象,还会将内存分成不同的级别分别管理,TCMalloc和Go运行时分配器都会引入线程缓存(Thread Cache)、中心缓存(Central Cache)和页堆(Page Heap)三个组件分级管理内存:
https://img.draveness.me/2020-02-29-15829868066457-multi-level-cache.png

参考: Go语言分配器实现原理