欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

Go 内存管理:TCMalloc 风格分配器与逃逸分析

发表于:|最后更新:|分类:后端开发|阅读:7163 次

Go 运行时内存分配器借鉴 TCMalloc 设计,通过多级缓存减少锁竞争,而逃逸分析决定对象分配在栈还是堆上。

一、三级分配结构

  • mcache:每个 P 私有的小对象缓存,无锁分配
  • mcentral:全局中心缓存,管理特定 size class 的 span
  • mheap:堆内存管理,向操作系统申请页

二、逃逸分析

bash
go build -gcflags="-m" main.go

编译器输出 escapes to heap 表示对象逃逸。常见逃逸场景:返回局部变量指针、被闭包捕获、赋值给接口类型、大小动态未知的切片。减少逃逸可降低 GC 压力并提升性能。