首页 > 解决方案 > golang中映射的结构有多大?

问题描述

我知道 map 是 Go 中的一种引用类型(它在其底层结构中有一个指向映射条目内存区域的指针)。但是,我想知道映射的底层结构的大小是多少,因为我想知道使用指向映射的指针作为函数参数是否比不使用指针更快。

查看这篇文,似乎 maptype 结构有很多字段,并且复制需要很长时间(相对于指针)。

查看 golang 标准库,我发现几乎没有使用 *map[x]x,所以我想只使用 map[x]x 作为函数参数应该是有效的。所以这让我想到,也许编译器实际上用指向 maptype 结构的指针替换了 map[x]x。是这样吗?如果不是,实际发生了什么可以避免复制带有许多字段的 maptype 结构?

标签: gohashmap

解决方案


mapGo变量的零值是一个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.goGo 源文件中。由于您只看到一个hmap指针,因此它们的大小不太可能相关。

请参阅GopherCon 2016:Keith Randall - Inside the Map Implementation


推荐阅读