首页 > 后端开发 > Golang > 最初为空的 Go Map 分配多少内存?

最初为空的 Go Map 分配多少内存?

Mary-Kate Olsen
发布: 2024-12-24 19:31:15
原创
388 人浏览过

How Much Memory Does an Initially Empty Go Map Allocate?

Go 映射中的内存分配:特定于实现的查询

在 Go 映射的世界中,内存分配是一个谜。初始化映射时缺少初始容量参数使得分配空间的大小受实现的影响。但是我们怎样才能揭开这个隐藏分配的秘密呢?

深入研究 Go Map 源代码会发现一个由标头和桶数组组成的结构。在未指定初始空间的情况下,映射仅包含单个存储桶。

标头本身就是一个名副其实的字段迷宫:

  • 1 int
  • 1 uint8
  • 1 uint16
  • 1 uint32
  • 2 unsafe.Pointer
  • 1 uintptr

在 64 位机器上,int、uintptr 和 unsafe.Pointer 的大小与字大小对齐(8 字节)。此组合为标头生成总共 40 个字节。

现在,让我们将注意力转向存储桶,其中包含 8 个 uint8 元素的数组。这为总计数增加了 8 个字节。

组合这些组件,我们得到总共 48 个字节(对于 64 位架构)。有了这些知识,我们就可以自信地揭开 Go 中映射内存分配的不确定性面纱。

以上是最初为空的 Go Map 分配多少内存?的详细内容。更多信息请关注PHP中文网其他相关文章!

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