首页 > 后端开发 > Golang > 新创建的 Go Map 消耗多少内存?

新创建的 Go Map 消耗多少内存?

Linda Hamilton
发布: 2024-12-06 04:36:19
原创
679 人浏览过

How Much Memory Does a Newly Created Go Map Consume?

估计为 Go 映射保留的内存

使用 Go 映射时,估计它们消耗的内存通常很有用。虽然文档指出初始内存分配取决于实现,但这里更深入地介绍了如何确定这一点:

检查映射源代码

Go 映射基于两种类型构建: hmap(标头)和bmap(桶数组)。检查源代码可以发现,当未指定初始空间时 (foo := make(map[string]int)),映射中只会创建一个存储桶。

Map 标头分解

地图头本身包含几个字段:

    int(bmap的大小数组)
  1. uint8(桶数)
  2. uint16(溢出桶数)
  3. uint32(增长地图之前的最小阈值)
  4. 两个不安全指针(对于元素和指针键)
  5. uintptr(未使用field)
假设是 64 位架构,int、uintptr 和 unsafe.Pointer 的大小各为 8 个字节。这为我们提供了标头大小:

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板