From: Rob Pike Date: Fri, 4 Dec 2009 08:26:08 +0000 (-0800) Subject: avoid an allocation inside bytes.Buffer by providing a static array. X-Git-Tag: weekly.2009-12-07~31 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=4ed57173b4c21e113bf8cae4984623eea220aa15;p=gostls13.git avoid an allocation inside bytes.Buffer by providing a static array. R=rsc https://golang.org/cl/165058 --- diff --git a/src/pkg/bytes/buffer.go b/src/pkg/bytes/buffer.go index 8fa64524c6..09202506ff 100644 --- a/src/pkg/bytes/buffer.go +++ b/src/pkg/bytes/buffer.go @@ -32,9 +32,9 @@ func copyBytes(dst []byte, doff int, src []byte) { // with Read and Write methods. // The zero value for Buffer is an empty buffer ready to use. type Buffer struct { - buf []byte; // contents are the bytes buf[off : len(buf)] - off int; // read at &buf[off], write at &buf[len(buf)] - oneByte []byte; // avoid allocation of slice on each WriteByte + buf []byte; // contents are the bytes buf[off : len(buf)] + off int; // read at &buf[off], write at &buf[len(buf)] + oneByte [1]byte; // avoid allocation of slice on each WriteByte } // Bytes returns the contents of the unread portion of the buffer; @@ -173,12 +173,8 @@ func (b *Buffer) WriteString(s string) (n int, err os.Error) { // The returned error is always nil, but is included // to match bufio.Writer's WriteByte. func (b *Buffer) WriteByte(c byte) os.Error { - if b.oneByte == nil { - // Only happens once per Buffer, and then we have a slice. - b.oneByte = make([]byte, 1) - } b.oneByte[0] = c; - b.Write(b.oneByte); + b.Write(&b.oneByte); return nil; }