登录
首页 >  Golang >  Go问答

为什么golang中的map桶最大限度为8个key/elem对?为什么选择数字8?

来源:stackoverflow

时间:2024-02-12 19:18:24 486浏览 收藏

本篇文章给大家分享《为什么golang中的map桶最大限度为8个key/elem对?为什么选择数字8?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

https://golang.org/src/runtime/map.go

golang地图源码中的注释如下:

// This file contains the implementation of Go's map type.
//
// A map is just a hash table. The data is arranged
// into an array of buckets. Each bucket contains up to
// 8 key/elem pairs. The low-order bits of the hash are
// used to select a bucket. Each bucket contains a few
// high-order bits of each hash to distinguish the entries
// within a single bucket.
//
// If more than 8 keys hash to a bucket, we chain on
// extra buckets.

为什么数字是八?

像这样的图像:(https://i.stack.imgur.com/co0bg.png)

原因是否与此类似https://laptrinhx.com/why-does-the-number-of-map-buckets-exceed-8-before-turning-into-a-red-black-tree-4063759990 /


正确答案


这来自 Go 1.4 的 initial hashmap.go(2014 年 7 月,CL 99380043

Dave Cheney 详细介绍了“How the Go runtime implements maps efficiently (without generics)”中的处理

Ricardo Erikson 添加了“Memory Allocation and Performance in Golang Maps”。
他引用了Alexander Kochetkov的文章“Some insights on Maps in Golang”,其中补充道:

里卡多补充道:

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>