go语言中的map底层原理分析


map 是一种key-value的键值对存储结构,其中key不能重复,底层用hash表存储。

在go的map实现中,它的底层结构体是hmap,hmap里维护着若干个bucket数组 (即桶数组)。

Bucket数组中每个元素都是bmap结构,也即每个bucket(桶)都是bmap结构,【ps:后文为了语义一致,和方便理解,就不再提bmap了,统一叫作桶】 每个桶中保存了8个kv对,如果8个满了,又来了一个key落在了这个桶里,会使用overflow连接下一个桶(溢出桶)。

划重点:
指向桶数组的指针

指向旧桶数组的指针

B 2^B个桶的数量

溢出桶的数量

储存溢出桶的extra