mspan内存管理单元

mspan内存管理单元

mspan内存管理单元 #

Go 的内存管理基本单元是 mspan,每个 mspan 中会维护着一块连续的虚拟内存空间,内存的起始地址由 startAddr 来记录。每个 mspan 存储的内存空间大小都是内存页的整数倍,由 npages 来保存。不过你需要注意的是,这里内存页并非是操作系统的物理页大小,Go 的内存页大小设置的是 8KB。mspan 结构的部分定义如下:

//snap/go/current/src/runtime/mheap.go
type mspan struct {
    next *mspan     // next span in list, or nil if none
    prev *mspan     // previous span in list, or nil if none
    startAddr uintptr // address of first byte of span aka s.base()
    npages    uintptr // number of pages in span
    ...
    spanclass   spanClass     // size class and noscan (uint8)
    ...
}

Viewpoint #

From #

24 | GC实例:Python和Go的内存管理机制是怎样的?