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