Go 内存分配架构 四层结构:应用程序、mcache、mcentral、mheap 以及操作系统 应用程序 new() · make() · 字面量 mallocgc() mcache 每个 P 独享,无锁 tiny allocator < 16B,无指针 span 缓存列表 16B–32KB,67种规格 栈缓存 goroutine 初始栈 cache miss mcentral 全局,按 size class 加锁 nonempty span 列表 有空闲 slot 的 span empty span 列表 slot 已耗尽的 span span 耗尽 mheap 全局堆,以 page(8KB)为单位 free treap 空闲 span 索引 scavenger 异步归还 OS 大对象(>32KB) 直接从这里分配 mmap() 操作系统(虚拟内存) >32KB 跳过 缓存层