经过反思,我最近发送的CLs建议mapdelete_fast*可能没有正确处理间接值Map。今天我没有电脑时间了,也许明天也没有。将此作为提醒,因为这些是在1.9中新引入的,如果处理不当,可能会导致内存损坏。真的应该仔细检查所有程序。
mgdq6dx11#
cc @randall77@martisch
qnakjoqk2#
@josharian 间接值总是使用慢速Map:参见 cmd/compile/internal/gc/walk.go
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 }
oaxa6hgo3#
是的,这应该没问题。快速版本不需要处理间接值。不过能有一个测试就更好了。
3条答案
按热度按时间mgdq6dx11#
cc @randall77@martisch
qnakjoqk2#
@josharian 间接值总是使用慢速Map:
参见
cmd/compile/internal/gc/walk.go
oaxa6hgo3#
是的,这应该没问题。快速版本不需要处理间接值。
不过能有一个测试就更好了。