go - golang中映射的结构有多大?
问题描述
我知道 map 是 Go 中的一种引用类型(它在其底层结构中有一个指向映射条目内存区域的指针)。但是,我想知道映射的底层结构的大小是多少,因为我想知道使用指向映射的指针作为函数参数是否比不使用指针更快。
查看这篇博文,似乎 maptype 结构有很多字段,并且复制需要很长时间(相对于指针)。
查看 golang 标准库,我发现几乎没有使用 *map[x]x,所以我想只使用 map[x]x 作为函数参数应该是有效的。所以这让我想到,也许编译器实际上用指向 maptype 结构的指针替换了 map[x]x。是这样吗?如果不是,实际发生了什么可以避免复制带有许多字段的 maptype 结构?
解决方案
map
Go变量的零值是一个nil
指针。
var m map[string]int
make
初始化 amap
并将map
变量设置为指向 package runtime
hmap
struct
。
m = make(map[string]int)
在 Go 中,所有参数都是按值传递的。在map
值、引用类型的情况下,map
值是指针。因此,将map
值作为函数或方法参数传递很快,您传递的是一个指针。
Gomap
runtime
struct
当前位于src/runtime/map.go
Go 源文件中。由于您只看到一个hmap
指针,因此它们的大小不太可能相关。
请参阅GopherCon 2016:Keith Randall - Inside the Map Implementation。
推荐阅读
- r - 是否有一个 R 函数来计算总概率,一旦我得到一个 Beta 后验,在 R 中以初始 Beta Prior 开始之后
- android - 当我为 Cashfree Payment 调用 doPayment() 方法时什么也没有发生
- migration - Lightroom:将编辑应用到原始文件
- user-interface - 带有 2 个图像(开/关)的 Tkinter 按钮在退出时保存变量,在下一个会话中加载它们
- flutter - 如何在类列表中搜索类的特定属性?
- python-3.x - 在类初始化程序中定期运行后台函数
- python - 如何在 Dash 中并排显示两个图表
- javascript - JS。由其他函数定义函数,都在一个对象内
- python-3.x - python检查键是否已经在字典中
- java - 看不到通知 - android studio