使用 Go 映射时,估计它们消耗的内存通常很有用。虽然文档指出初始内存分配取决于实现,但这里更深入地介绍了如何确定这一点:
Go 映射基于两种类型构建: hmap(标头)和bmap(桶数组)。检查源代码可以发现,当未指定初始空间时 (foo := make(map[string]int)),映射中只会创建一个存储桶。
1 * 8 + 1 * 1 + 1 * 2 + 1 * 4 + 2 * 8 + 1 * 8 = 40 bytes存储桶结构映射中的每个存储桶都是一个由八个 uint8 值组成的数组,这会额外添加 8 个字节:
8 * 1 = 8 bytes总内存消耗将 header 和 Bucket 大小相加,我们得到总内存消耗of:
40 + 8 = 48 bytes (64-bit architecture)此估计可用于估算新创建的未指定初始空间的 Go 映射的内存使用量。
以上是新创建的 Go Map 消耗多少内存?的详细内容。更多信息请关注PHP中文网其他相关文章!