Go内存分配
分级分配
线程缓存分配(Thread-Caching Malloc, TCMalloc)是用于分配内存的机制,比glibc中的malloc
还要快很多。Go语言的内存分配器借鉴了TCMalloc的设计实现高速的内存分配,它的核心理念是使用多级缓存将对象根据大小分类,按照类别实施不同的分配策略。
对象大小
类别 | 大小 |
---|---|
微对象 | (0, 16B) |
小对象 | [16B, 32KB] |
大对象 | (32KB, +∞) |
多级缓存
内存分配器不仅会区别对待大小不同的对象,还会将内存分成不同的级别分别管理,TCMalloc和Go运行时分配器都会引入线程缓存(Thread Cache)、中心缓存(Central Cache)和页堆(Page Heap)三个组件分级管理内存:
参考: Go语言分配器实现原理