Go 映射中的内存分配:特定于实现的查询
在 Go 映射的世界中,内存分配是一个谜。初始化映射时缺少初始容量参数使得分配空间的大小受实现的影响。但是我们怎样才能揭开这个隐藏分配的秘密呢?
深入研究 Go Map 源代码会发现一个由标头和桶数组组成的结构。在未指定初始空间的情况下,映射仅包含单个存储桶。
标头本身就是一个名副其实的字段迷宫:
在 64 位机器上,int、uintptr 和 unsafe.Pointer 的大小与字大小对齐(8 字节)。此组合为标头生成总共 40 个字节。
现在,让我们将注意力转向存储桶,其中包含 8 个 uint8 元素的数组。这为总计数增加了 8 个字节。
组合这些组件,我们得到总共 48 个字节(对于 64 位架构)。有了这些知识,我们就可以自信地揭开 Go 中映射内存分配的不确定性面纱。
以上是最初为空的 Go Map 分配多少内存?的详细内容。更多信息请关注PHP中文网其他相关文章!