计算 Go 中映射的内存占用
确定 Go 中映射的内存占用可能会带来挑战。编码/二进制包的 Size 函数可用于计算切片或固定值的长度,但不能扩展到映射。
为了解决这个问题,我们可以深入研究 Go 映射的内部结构。地图头(hmap)包含诸如活细胞数量和桶数量的对数以2为底的信息。
每个桶(bmap)保存恒定数量的顶部哈希值,后面是键和价值观。这种组织消除了某些键值组合所需的填充。
计算映射的内存占用量涉及对标头的大小、存储桶的大小以及存储在其中的键和值的大小求和地图:
memory_footprint = unsafe.Sizeof(hmap) + (len(theMap) * 8) + (len(theMap) * 8 * unsafe.Sizeof(x)) + (len(theMap) * 8 * unsafe.Sizeof(y))
哪里:
请注意,与包共享 hmap 结构需要使用汇编代码,类似于 Go 运行时中使用的 thunk.s 方法。
以上是如何准确计算Go Map的内存占用?的详细内容。更多信息请关注PHP中文网其他相关文章!