go 运行时:审计Map快速例程以支持间接值,

ao218c7q  于 4个月前  发布在  Go
关注(0)|答案(3)|浏览(42)

经过反思,我最近发送的CLs建议mapdelete_fast*可能没有正确处理间接值Map。今天我没有电脑时间了,也许明天也没有。将此作为提醒,因为这些是在1.9中新引入的,如果处理不当,可能会导致内存损坏。真的应该仔细检查所有程序。

mgdq6dx1

mgdq6dx11#

cc @randall77@martisch

qnakjoqk

qnakjoqk2#

@josharian 间接值总是使用慢速Map:
参见 cmd/compile/internal/gc/walk.go

2838 func mapfast(t *types.Type) int {
2839     // Check ../../runtime/hashmap.go:maxValueSize before changing.
2840     if t.Val().Width > 128 {
2841         return mapslow
2842     }
2843     switch algtype(t.Key()) {
2844     case AMEM32:
2845         return mapfast32
2846     case AMEM64:
2847         return mapfast64
2848     case ASTRING:
2849         return mapfaststr
2850     }
2851     return mapslow
2852 }
oaxa6hgo

oaxa6hgo3#

是的,这应该没问题。快速版本不需要处理间接值。
不过能有一个测试就更好了。

相关问题