From: David Crawshaw Date: Mon, 29 Feb 2016 02:58:57 +0000 (-0900) Subject: cmd/link: allocate small []byte reads together X-Git-Tag: go1.7beta1~1639 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=36f25a7e7ba3d5527cee8f4ef645827085243e59;p=gostls13.git cmd/link: allocate small []byte reads together Reduces number of memory allocations by 12%: Before: 1816664 After: 1581591 Small speed improvement. Change-Id: I61281fb852e8e31851a350e3ae756676705024a4 Reviewed-on: https://go-review.googlesource.com/20027 Reviewed-by: Ian Lance Taylor TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/link/internal/ld/objfile.go b/src/cmd/link/internal/ld/objfile.go index 36a65ba40e..b04244f3cc 100644 --- a/src/cmd/link/internal/ld/objfile.go +++ b/src/cmd/link/internal/ld/objfile.go @@ -431,9 +431,23 @@ func rdstring(f *obj.Biobuf) string { return string(p) } +var ( + rddataBuf = make([]byte, rddataBufMax) + rddataBufMax = 1 << 14 +) + func rddata(f *obj.Biobuf) []byte { - n := rdint64(f) - p := make([]byte, n) + var p []byte + n := rdint(f) + if n > rddataBufMax { + p = make([]byte, n) + } else { + if len(rddataBuf) < n { + rddataBuf = make([]byte, rddataBufMax) + } + p = rddataBuf[:n:n] + rddataBuf = rddataBuf[n:] + } obj.Bread(f, p) return p }