【转载】golang内存分配

在 1.10 以前 go 的堆地址空间是线性连续扩展的, 比如在 1.10(linux amd64)中, 最大可扩展到 512GB. 因为 go 在 gc 的时候会根据拿到的指针地址来判断是否位于 go 的 heap 的, 以及找到其对应的 span, 其判断机制需要 gc heap 是连续的. 但是连续扩展有个问题, cgo 中的代码(尤其是 32 位系统上)可能会占用未来会用于 go...

Go 语言的内存分配采用类似 tcmalloc 的结构,通过小块连续内存页减少碎片,支持无锁分配和延迟归还内存。1.11 版本引入稀疏索引,支持超过 512GB 内存,管理可达 256TB。

原文中文,约800字,阅读约需2分钟。发表于:
阅读原文