go内存分配
[TOC]
主要结构
注意page 页
是向操作系统申请内存的最小单位

heapArena
保留整个虚拟地址空间
mheap
分配的堆,在页大小为8KB的粒度上进行管理。位于黑色区域,访问需要全局加锁。
mspan
是mheap上管理的一连串的页。
mcentral
收集了给定大小等级的所有span。位于灰色区域,访问需要局部加锁。
mcache
为pre-p的缓存。位于白色区域,访问不需要加锁。
对象分配
大对象分配
大对象(32KB, +∞)
如果要分配的页数小于16时,就先尝试从pcache
中申请内存。如果申请失败或者申请的页数过大则通过mheap上分配内存。
小对象分配
小对象[16B, 32KB]
先尝试从mcache中获取,再尝试从mcentral中获取,最后尝试从mheap中获取
微对象分配
微对象(0B, 16B)
先尝试从mcache中获取tinySpanClass
,再尝试从mcentral中获取,最后尝试从mheap中获取
分配器
fixalloc
fixalloc
是一个基于自由列表的固定大小的分配器。TODO: 7.2 组件
tiny分配器
stackcache
reference
最后更新于
这有帮助吗?