【转载】golang内存分配
💡
原文中文,约800字,阅读约需2分钟。
📝
内容提要
Go 语言的内存分配采用类似 tcmalloc 的结构,通过小块连续内存页减少碎片,支持无锁分配和延迟归还内存。1.11 版本引入稀疏索引,支持超过 512GB 内存,管理可达 256TB。
🎯
关键要点
- Go 语言的内存分配采用类似 tcmalloc 的结构,通过小块连续内存页减少碎片。
- 支持无锁分配和延迟归还内存,GC 后的内存页不会立即归还给操作系统。
- 在 1.10 版本之前,Go 的堆地址空间是线性连续扩展,最大可扩展到 512GB。
- 1.10 版本的连续扩展可能导致 cgo 代码占用未来的 Go heap 内存,造成地址不连续。
- 1.11 版本引入稀疏索引,支持超过 512GB 内存,允许内存空间扩展时不连续。
- 新的内存管理结构可以管理高达 256TB 的内存,适用于 64 位机器的 48bit 寻址总线。
- Go 的内存分配机制通过 span 机制管理 8KB 整数倍的内存,减少内存碎片。
➡️