mapextra的作用?
曹大你好,不是很理解map中的extra的作用,我们不是可以通过map中的桶里面的overflow访问到溢出的数据,为什么还要链接到extra?
59
收起
正在回答 回答被采纳积分+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 当成白色对象提前回收掉。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星