From 8096881927ecad4acb195ccca8404c5eaa1b24d7 Mon Sep 17 00:00:00 2001 From: Shahar Kohanim Date: Mon, 29 Feb 2016 16:46:18 +0200 Subject: [PATCH] cmd/link: batch allocations of Lsym Reduces best of 10 linking of cmd/go by ~5% Change-Id: If673b877ee12595dae517d7eb48430451e5cadba Reviewed-on: https://go-review.googlesource.com/20060 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick Reviewed-by: David Crawshaw TryBot-Result: Gobot Gobot --- src/cmd/link/internal/ld/link.go | 1 + src/cmd/link/internal/ld/sym.go | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cmd/link/internal/ld/link.go b/src/cmd/link/internal/ld/link.go index 73d23c6cf0..5a02aca728 100644 --- a/src/cmd/link/internal/ld/link.go +++ b/src/cmd/link/internal/ld/link.go @@ -158,6 +158,7 @@ type Link struct { Nhistfile int32 Filesyms *LSym Moduledata *LSym + LSymBatch []LSym } // The smallest possible offset from the hardware stack pointer to a local diff --git a/src/cmd/link/internal/ld/sym.go b/src/cmd/link/internal/ld/sym.go index 099243442b..5f31e59e09 100644 --- a/src/cmd/link/internal/ld/sym.go +++ b/src/cmd/link/internal/ld/sym.go @@ -157,8 +157,12 @@ func linknew(arch *LinkArch) *Link { } func linknewsym(ctxt *Link, symb string, v int) *LSym { - s := new(LSym) - *s = LSym{} + batch := ctxt.LSymBatch + if len(batch) == 0 { + batch = make([]LSym, 1000) + } + s := &batch[0] + ctxt.LSymBatch = batch[1:] s.Dynid = -1 s.Plt = -1 -- 2.50.0