Golang map在迁移过程中对get/put/del/for操作的原理进行分析
发布时间
阅读量:
阅读量
文章目录
- 前言
- 一、map底层结构
- 二、put操作
- 三、get操作
- 四、delete操作
- 五、for操作
- 总结
前言
本文旨在详细阐述Map在容量扩展模式中的增量或等量扩容功能及其相关操作(如Get、Put、Delete及For_each)的具体实现方式。通过深入研究代码实现细节, 解析其底层运行机制.
一、map底层结构
type hmap struct {
count int // 键值对数量
flags uint8
B uint8 // 2^B 表示桶的数量
noverflow uint16
hash0 uint32
buckets unsafe.Pointer // 指向桶对应的数组
oldbuckets unsafe.Pointer // map增量扩容或者等量扩容时,会用此指针指向旧桶
nevacuate uintptr // 标识扩容时迁移进度,小于此值的bucket都已经迁移完成
extra *mapextra
}
如下图所示,更直观一些。
