mheap结构

mheap结构

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的内存管理机制是怎样的?

参看 Go虚拟内存布局