浅谈GO-内存分配
go语言的内存分配不是每次都触发系统调用,go程序运行开始,先向操作系统申请一块较大的内存空间,然后由go在运行时分配
go内存分配的基本单元的mspan,为了减少内存碎片,go有67种大小的mspan,给对象分配最接近的mspan
GPM模型中,每个P有一块本地内存mcache,小对象直接从mcache中分配,各个gorutine直接也不存在竞争
mcentral,负责切割好mcache并记录哪些用了,哪些没有,当mcache不够用时,直接从mcentral申请
mheap,全局的堆内存管理,切割好mcentral,mcentral不够了向mheap申请