package
0.0.0-20240519093100-246dc9ce96c1
Repository: https://github.com/shenfz/hellogolang.git
Documentation: pkg.go.dev
# README
内存分配
大小对象 界值32kb
小对象是在
mcache
(内核空间的/栈) 中分配的 大对象是直接从mheap
(用户空间/堆空间)分配的
小对象
- 本地缓存持有一个被叫做
mspan
的内存块列表 (span ,32kb 大小的内存块) - Goroutine 会使用它所在 P 的本地缓存,在
span 链表
中寻找第一个可用的空闲对象
(使用这种本地缓存不需要锁操作,分配效率更高) span 链表
被划分为8 字节大小到 32k 字节
大小的块,约 70 个的大小等级
,每个等级可以存储不同大小的对象 (每个等级的span表存在俩份,一份存指针,一份不存指针,方便GC只扫指针)中央链表(mcentral
维护着每个span双向链表的使用,一旦无可用链表空槽
,就从堆上分配span
,并链接到所需链表的后面