Content #
mheap 在 Go 的运行时里边是只有一个实例的全局变量。维护 Go 的整个虚拟内存布局的 heapArena 的二维数组,就存放在 mheap 中。mheap 结构对应于 TCMalloc 中的 Page heap 结构。mheap 的主要结构如下:
type mheap struct {
lock mutex
arenas [1 << arenaL1Bits]*[1 << arenaL2Bits]*heapArena
central [numSpanClasses]struct {
mcentral mcentral
pad [cpu.CacheLinePadSize - unsafe.Sizeof(mcentral{})%cpu.CacheLinePadSize]byte
}
}
var mheap_ mheap
mheap 中存放了 68×2 个不同 spanClass 的 mcentral 数组,分别区分了 scan 队列以及 noscan 队列。
Viewpoint #
From #
24 | GC实例:Python和Go的内存管理机制是怎样的?
Links #
参看 Go虚拟内存布局