golang 内存分配模型
2019-03-14 17:56:30 0 举报
golang
作者其他创作
大纲/内容
mspan并不直接拥有内存空间,它负责管理起始地址为startAddr、级别(预分配页个数)为sizeclass的连续地址空间
mspan
...
*prev
67
多级span
page
class0 central
busy
*startAddr
因为会有多个 P 过来竞争。
span
empty
2
nonempty
记录所有分配的span
未分配span存放free[2] 是由包含 2 个 page 的 mspan
lcok
central
allspan
*next
spanclass
....
mHeap
tinyoffset
用于存储tiny位偏移
1
free
127
arenas
存放多级central使用填充避免伪共享
用于分配小于16byte小对象当一个span用完时会从mcahe自身alloc中重新分配一块
sizeclass
npages
class2
alloc
tiny
用于分配内存的连续虚拟地址区域
class1
每个P独享数据结构分配无需加锁
mcache
0 条评论
下一页