]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: allocate small []byte reads together
authorDavid Crawshaw <crawshaw@golang.org>
Mon, 29 Feb 2016 02:58:57 +0000 (17:58 -0900)
committerDavid Crawshaw <crawshaw@golang.org>
Mon, 29 Feb 2016 18:45:35 +0000 (18:45 +0000)
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 <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/link/internal/ld/objfile.go

index 36a65ba40eec07eaf3201766a9955da12c73be3a..b04244f3cc98ea4a45fa1a55c908e00994eef135 100644 (file)
@@ -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
 }