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