golang-underlying-principle-analysis icon indicating copy to clipboard operation
golang-underlying-principle-analysis copied to clipboard

第8章96页疑问

Open JimChenWYU opened this issue 2 years ago • 1 comments

makeBucketArray会为map申请了内存,需要注意的是,只有map的数量大于24,才会在初始化时生成溢出桶。溢出桶的大小为2(b-4),其中b为桶的大小

然后从下面源码查看

if b >= 4 {
// ...
}

是否map的数量大于等于16呢?而且从调用makeBucketArray调用传入的b来看,是hmap的B参数,该参数跟桶的个数有关,2^B为桶的数量,所以这里b含义应该不是桶的大小吧

JimChenWYU avatar Mar 02 '22 06:03 JimChenWYU

我理解是B的计算规则是map数量≤2^B*6.5(go中map的负载因子被硬性的定为了 6.5),当B=3时map数量最大为52,所以当map数量等于53,b=4,此时会生成溢出桶。我源码debugmap数量为24的时候B是等于2的,不知道这是不是正确的。

wanghaowish avatar Jul 26 '22 02:07 wanghaowish