aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/encoding/gob/decode.go5
-rw-r--r--src/encoding/gob/timing_test.go4
2 files changed, 4 insertions, 5 deletions
diff --git a/src/encoding/gob/decode.go b/src/encoding/gob/decode.go
index 013f71ccdb..879d6d2b77 100644
--- a/src/encoding/gob/decode.go
+++ b/src/encoding/gob/decode.go
@@ -557,11 +557,10 @@ func decodeIntoValue(state *decoderState, op decOp, isPtr bool, value reflect.Va
// Because the internals of maps are not visible to us, we must
// use reflection rather than pointer magic.
func (dec *Decoder) decodeMap(mtyp reflect.Type, state *decoderState, value reflect.Value, keyOp, elemOp decOp, ovfl error) {
+ n := int(state.decodeUint())
if value.IsNil() {
- // Allocate map.
- value.Set(reflect.MakeMap(mtyp))
+ value.Set(reflect.MakeMapWithSize(mtyp, n))
}
- n := int(state.decodeUint())
keyIsPtr := mtyp.Key().Kind() == reflect.Ptr
elemIsPtr := mtyp.Elem().Kind() == reflect.Ptr
keyInstr := &decInstr{keyOp, 0, nil, ovfl}
diff --git a/src/encoding/gob/timing_test.go b/src/encoding/gob/timing_test.go
index 2a503ebfc5..3478bd247e 100644
--- a/src/encoding/gob/timing_test.go
+++ b/src/encoding/gob/timing_test.go
@@ -289,7 +289,7 @@ func BenchmarkDecodeInterfaceSlice(b *testing.B) {
}
func BenchmarkDecodeMap(b *testing.B) {
- count := 10000
+ count := 1000
m := make(map[int]int, count)
for i := 0; i < count; i++ {
m[i] = i
@@ -303,7 +303,7 @@ func BenchmarkDecodeMap(b *testing.B) {
bbuf := benchmarkBuf{data: buf.Bytes()}
b.ResetTimer()
for i := 0; i < b.N; i++ {
- rm := make(map[int]int, 0)
+ var rm map[int]int
bbuf.reset()
dec := NewDecoder(&bbuf)
err := dec.Decode(&rm)