mapextra的作用?

mapextra的作用?

曹大你好,不是很理解map中的extra的作用,我们不是可以通过map中的桶里面的overflow访问到溢出的数据,为什么还要链接到extra?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
Xargin 2021-05-31 22:54:38

回复套回复没法编辑,我另开一个能编辑的回复吧:


这个涉及到 Go 的 GC,因为 map 的 key 和 value 不含指针的时候,GC 是不扫描 bucket 里的 entry 的,但是 overflow 本质上是个指针,这些 overflow 的桶(虽然不多)需要被 GC 扫描得到,要不然会被当成不可达的内存给回收掉


所以在 map 的 kv 不含指针,且 key size < 128 && v size < 128 的时候,需要专门把这些溢出桶找一个结构记录一下,保证这些 bucket 对象在内存管理看来是 "alive" 的。要不然 GC 会将这些 overflow 的 bucket 当成白色对象提前回收掉。

Xargin 2021-05-31 15:37:45

https://class.imooc.com/course/qadetail/291010,看看这个的话呢,里面有俩图

  • 嗯嗯,这个我看过,我看遍历也是直接通过overflow指针遍历的,感觉没有extra这样也可以完成map数据的增删改查;为什么要设计这个extra呢?

    2021-05-31 21:34:27
  • Xargin 回复 提问者 weixin_慕设计2382076 #2

    ​哦,我知道你的意思了


    这个涉及到 Go 的 GC,因为 map 的 key 和 value 不含指针的时候,GC 是不扫描 bucket 的,但是 overflow 本质上是个指针,这些 overflow 的桶(虽然不多)还是需要被 GC 扫描得到,要不然会被当成不可达的内存给回收掉


    所以在 map 的 kv 不含指针,且 size < 128 的时候,需要专门把这些溢出桶找一个结构记录一下,来保证这些 bucket 对象在内存管理看来是 "alive" 的。

    2021-05-31 22:52:03
  • Xargin #3

    看外面那条回复吧,这个编辑不了,描述稍微有点问题

    2021-05-31 22:57:48
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师