前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >go-内存管理

go-内存管理

原创
作者头像
爱学习的羊羊
修改于 2025-03-25 02:18:15
修改于 2025-03-25 02:18:15
800
举报

堆内存结构

  • mheap: 从虚拟内存机制中获取虚拟地址,其中按class size分类,包含多个mcentral
  • mcentral: 本身是定义在mheap里的,每个里面包含full span list和partial span list代表不可用和可用的span list
  • mcache: 和GMP里面里的P绑定,一般和cpu核数对齐,不加锁,提供更高性能,内部按对象的大小分类
    • tiny对象:tiny对象则是小于等于16b,比如多个bool对象有可能共享一个tiny对象。tiny对象不足会向对象较小的span中获取再放到tiny里, 不区分scan和noscan
    • 其他对象:超过16b的都放在span里,不同大小的对象分别一个span,需要区分noscan和scan,方便GC, noscan只要判断自身是不是存活即可,不需要逐步向下遍历

栈对内结构

栈内存在开启协程时会分配一定的栈内存,协程结束时会进行回收,若变量逃逸则会从堆上分配内存

内存对象分配流程

  • tiny对象的分配流程
  • 小对象的分配流程
  • 大对象的分配流程

注意:栈内存和堆内存都属于逻辑内存,都是由虚拟内存机制获取而来,最终的物理内存在内存或者磁盘

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档