Advertisement

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
    }

如下图所示,更直观一些。

![m

全部评论 (0)

还没有任何评论哟~