Go 运行时内存分配器借鉴 TCMalloc 设计,通过多级缓存减少锁竞争,而逃逸分析决定对象分配在栈还是堆上。
一、三级分配结构
- mcache:每个 P 私有的小对象缓存,无锁分配
- mcentral:全局中心缓存,管理特定 size class 的 span
- mheap:堆内存管理,向操作系统申请页
二、逃逸分析
bash
go build -gcflags="-m" main.go编译器输出 escapes to heap 表示对象逃逸。常见逃逸场景:返回局部变量指针、被闭包捕获、赋值给接口类型、大小动态未知的切片。减少逃逸可降低 GC 压力并提升性能。