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