aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link/internal/loader/loader.go
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2020-04-28 18:59:57 -0400
committerCherry Zhang <cherryyz@google.com>2020-04-29 16:21:37 +0000
commitf886ff7b417739cf2269267e7b057a7cfdc85324 (patch)
tree1521a272c00bfc678e370111a20dced54245cd9c /src/cmd/link/internal/loader/loader.go
parentdf2a46f85ad1e28076f639e3608ae9e2809f97a2 (diff)
downloadgo-f886ff7b417739cf2269267e7b057a7cfdc85324.tar.gz
go-f886ff7b417739cf2269267e7b057a7cfdc85324.zip
[dev.link] cmd/link: free loader memory after LoadFull
After LoadFull, we'll be using sym.Symbols mostly. We still need the loader information for symbol index mappings and name lookups, but not much else. Free some memory. Linking cmd/compile, name old time/op new time/op delta Loadlibfull_GC 44.5M ± 0% 35.8M ± 0% -19.66% (p=0.008 n=5+5) Archive_GC 46.4M ± 0% 37.6M ± 0% -18.89% (p=0.008 n=5+5) Linking cmd/compile with external linking, name old time/op new time/op delta Loadlibfull_GC 82.5M ± 0% 57.4M ± 0% -30.41% (p=0.008 n=5+5) Archive_GC 86.8M ± 0% 61.7M ± 0% -28.90% (p=0.008 n=5+5) Change-Id: I6859d488172ef8968918b86de527fbfed6832ebf Reviewed-on: https://go-review.googlesource.com/c/go/+/230300 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jeremy Faller <jeremy@golang.org>
Diffstat (limited to 'src/cmd/link/internal/loader/loader.go')
-rw-r--r--src/cmd/link/internal/loader/loader.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go
index e3dec5feee..a6d9417c00 100644
--- a/src/cmd/link/internal/loader/loader.go
+++ b/src/cmd/link/internal/loader/loader.go
@@ -2124,6 +2124,38 @@ func (l *Loader) LoadFull(arch *sys.Arch, syms *sym.Symbols, needReloc bool) {
}
}
}
+
+ // Free some memory.
+ // At this point we still need basic index mapping, and some fields of
+ // external symbol payloads, but not much else.
+ l.values = nil
+ l.symSects = nil
+ l.outdata = nil
+ l.itablink = nil
+ l.attrOnList = nil
+ l.attrLocal = nil
+ l.attrNotInSymbolTable = nil
+ l.attrVisibilityHidden = nil
+ l.attrDuplicateOK = nil
+ l.attrShared = nil
+ l.attrExternal = nil
+ l.attrReadOnly = nil
+ l.attrTopFrame = nil
+ l.attrSpecial = nil
+ l.attrCgoExportDynamic = nil
+ l.attrCgoExportStatic = nil
+ l.outer = nil
+ l.align = nil
+ l.dynimplib = nil
+ l.dynimpvers = nil
+ l.localentry = nil
+ l.extname = nil
+ l.elfType = nil
+ l.plt = nil
+ l.got = nil
+ l.dynid = nil
+ l.relocVariant = nil
+ l.extRelocs = nil
}
// ResolveABIAlias given a symbol returns the ABI alias target of that