package
0.0.0-20240519093100-246dc9ce96c1
Repository: https://github.com/shenfz/hellogolang.git
Documentation: pkg.go.dev

# README

内存分配

大小对象 界值32kb

小对象是在 mcache(内核空间的/栈) 中分配的 大对象是直接从 mheap (用户空间/堆空间)分配的

小对象

  1. 本地缓存持有一个被叫做 mspan 的内存块列表 (span ,32kb 大小的内存块)
  2. Goroutine 会使用它所在 P 的本地缓存,在 span 链表中寻找第一个可用的空闲对象 (使用这种本地缓存不需要锁操作,分配效率更高)
  3. span 链表被划分为 8 字节大小到 32k 字节大小的块,约 70 个的大小等级,每个等级可以存储不同大小的对象 (每个等级的span表存在俩份,一份存指针,一份不存指针,方便GC只扫指针)
  4. 中央链表(mcentral维护着每个span双向链表的使用,一旦无 可用链表空槽,就 从堆上分配span ,并 链接到所需链表的后面