Below you will find pages that utilize the taxonomy term “Mspan”
April 12, 2021
Golang 内存组件之mspan、mcache、mcentral 和 mheap 数据结构
"\u003cp\u003eGolang中的内存组件关系如下图所示\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2021/04/5a666325bb7cfea6f5182e0ee7c528cf.jpg\" alt=\"components of memory allocation\"\u003egolang 内存分配组件\u003c/p\u003e\n\u003cp\u003e在学习golang 内存时,经常会涉及几个重要的数据结构,如果不熟悉它们的情况下,理解起来就显得格外的吃力,所以本篇主要对相关的几个内存组件做下数据结构的介绍。\u003c/p\u003e\n\u003cp\u003e在 Golang 中,\u003ccode\u003emcache\u003c/code\u003e、\u003ccode\u003emspan\u003c/code\u003e、\u003ccode\u003emcentral\u003c/code\u003e 和 \u003ccode\u003emheap\u003c/code\u003e 是内存管理的四大组件,\u003ccode\u003emcache\u003c/code\u003e 管理线程在本地缓存的 \u003ccode\u003emspan\u003c/code\u003e,而 \u003ccode\u003emcentral\u003c/code\u003e 管理着全局的 \u003ccode\u003emspan\u003c/code\u003e 为所有 \u003ccode\u003emcache\u003c/code\u003e 提供所有线程。\u003c/p\u003e\n\u003cp\u003e根据分配对象的大小,内部会使用不同的内存分配机制,详细参考函数 \u003ca href=\"https://github.com/golang/go/blob/go1.16.2/src/runtime/malloc.go#L902-L1171\"\u003emallocgo()\u003c/a\u003e ,所于内存分配与回收,参考文件介绍 \u003ca href=\"https://github.com/golang/go/blob/go1.16.2/src/runtime/malloc.go#L5\"\u003emalloc.go\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e\u0026lt;16KB\u003c/code\u003e 会使用微小对象内存分配器从 \u003ccode\u003eP\u003c/code\u003e 中的 \u003ccode\u003emcache\u003c/code\u003e 分配,主要使用 \u003ccode\u003emcache.tinyXXX\u003c/code\u003e 这类的字段\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e16-32KB\u003c/code\u003e 从 \u003ccode\u003eP\u003c/code\u003e 中的 \u003ccode\u003emcache\u003c/code\u003e 中分配\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\u0026gt;32KB\u003c/code\u003e 直接从 \u003ccode\u003emheap\u003c/code\u003e 中分配\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e对于golang中的内存申请流程,大家应该都非常熟悉了,这里不再进行详细描述。\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2021/04/1bb7fe2168b7ac2e24afadf698dc6ee6.png\" alt=\"\"\u003eGolang 内存组件关系\u003c/p\u003e\n\u003ch1 id=\"mcache\"\u003emcache\u003c/h1\u003e\n\u003cp\u003e在GPM关系中,会在每个 \u003ccode\u003eP …\u003c/code\u003e\u003c/p\u003e"