From: Rob Pike Date: Thu, 24 Mar 2011 04:49:19 +0000 (-0700) Subject: gob: remove another allocation. X-Git-Tag: weekly.2011-03-28~44 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d1b75bbc4609087a69bf6bdb908036c58c8947ea;p=gostls13.git gob: remove another allocation. The top level bytes.Buffer is always there and can be re-used. Rpc goes from 83 to 79 mallocs per round trip. R=rsc CC=golang-dev https://golang.org/cl/4271062 --- diff --git a/src/pkg/gob/encoder.go b/src/pkg/gob/encoder.go index 55481a9885..e52a4de29f 100644 --- a/src/pkg/gob/encoder.go +++ b/src/pkg/gob/encoder.go @@ -21,6 +21,7 @@ type Encoder struct { countState *encoderState // stage for writing counts freeList *encoderState // list of free encoderStates; avoids reallocation buf []byte // for collecting the output. + byteBuf bytes.Buffer // buffer for top-level encoderState err os.Error } @@ -219,7 +220,8 @@ func (enc *Encoder) EncodeValue(value reflect.Value) os.Error { } enc.err = nil - state := enc.newEncoderState(new(bytes.Buffer)) + enc.byteBuf.Reset() + state := enc.newEncoderState(&enc.byteBuf) enc.sendTypeDescriptor(enc.writer(), state, ut) enc.sendTypeId(state, ut)