]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cgo,cmd/go: preallocate slices if they have known fixed capacities
authorapocelipes <seve3r@outlook.com>
Fri, 11 Oct 2024 03:22:00 +0000 (03:22 +0000)
committerGopher Robot <gobot@golang.org>
Mon, 14 Oct 2024 15:47:06 +0000 (15:47 +0000)
This allows for more efficient use of memory.

Change-Id: I16f399a25c23b804e55289ca055fa83ea9862f16
GitHub-Last-Rev: 19bb96a7cf4d27c085cfdb074905c4bf34eb660d
GitHub-Pull-Request: golang/go#69841
Reviewed-on: https://go-review.googlesource.com/c/go/+/618960
Auto-Submit: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
18 files changed:
src/cmd/cgo/ast.go
src/cmd/cgo/main.go
src/cmd/go/internal/base/path.go
src/cmd/go/internal/envcmd/env.go
src/cmd/go/internal/fsys/fsys.go
src/cmd/go/internal/imports/scan.go
src/cmd/go/internal/list/list.go
src/cmd/go/internal/load/godebug.go
src/cmd/go/internal/modfetch/codehost/git.go
src/cmd/go/internal/modfetch/fetch.go
src/cmd/go/internal/modget/get.go
src/cmd/go/internal/modload/init.go
src/cmd/go/internal/run/run.go
src/cmd/go/internal/search/search.go
src/cmd/go/internal/vcweb/vcstest/vcstest.go
src/cmd/go/internal/work/action.go
src/cmd/go/internal/work/gc.go
src/cmd/go/internal/work/gccgo.go

index 3cbbeafdca87358d6ac8a9259c058372069b67cb..861479db7acf5bf499baaccf0f061d056f17ec1b 100644 (file)
@@ -181,7 +181,7 @@ func (f *File) ParseGo(abspath string, src []byte) {
 // Like ast.CommentGroup's Text method but preserves
 // leading blank lines, so that line numbers line up.
 func commentText(g *ast.CommentGroup) string {
-       var pieces []string
+       pieces := make([]string, 0, len(g.List))
        for _, com := range g.List {
                c := com.Text
                // Remove comment markers.
index 44252d9144855616f2a54b5dd2f4478d80a35503..939e282ff069ed02ba8f3b11652573bd848ed8b4 100644 (file)
@@ -83,7 +83,7 @@ func (f *File) offset(p token.Pos) int {
 }
 
 func nameKeys(m map[string]*Name) []string {
-       var ks []string
+       ks := make([]string, 0, len(m))
        for k := range m {
                ks = append(ks, k)
        }
index 1c9dace54a82e886b052ad1fd2d1496f22b4bed8..96cf1a2f053787f68f80db38b98dc2c385752f30 100644 (file)
@@ -78,7 +78,7 @@ func relConservative(basepath, targpath string) (string, error) {
 // RelPaths returns a copy of paths with absolute paths
 // made relative to the current directory if they would be shorter.
 func RelPaths(paths []string) []string {
-       var out []string
+       out := make([]string, 0, len(paths))
        for _, p := range paths {
                rel, err := relConservative(Cwd(), p)
                if err == nil && len(rel) < len(p) {
index cb5e226e7bbaa158db98fafb8696c011c9e88add..6be387201207ca0b3610f158c960fa2a6231223a 100644 (file)
@@ -340,7 +340,7 @@ func runEnv(ctx context.Context, cmd *base.Command, args []string) {
                // Show only the named vars.
                if !*envChanged {
                        if *envJson {
-                               var es []cfg.EnvVar
+                               es := make([]cfg.EnvVar, 0, len(args))
                                for _, name := range args {
                                        e := cfg.EnvVar{Name: name, Value: findEnv(env, name)}
                                        es = append(es, e)
index c5889a273954c62aee9b64e821c83190e07afd48..11293120f68ef4f2740848c385f5fb9a4a4a0a02 100644 (file)
@@ -761,7 +761,7 @@ func glob(dir, pattern string, matches []string) (m []string, e error) {
                return // ignore I/O error
        }
 
-       var names []string
+       names := make([]string, 0, len(list))
        for _, info := range list {
                names = append(names, info.Name())
        }
index ee11a8708b5eaa26c904bbb41477c19aa773e136..e18f28c351b6d4e03320e8365712702b36ddab95 100644 (file)
@@ -98,7 +98,7 @@ Files:
 var ErrNoGo = fmt.Errorf("no Go source files")
 
 func keys(m map[string]bool) []string {
-       var list []string
+       list := make([]string, 0, len(m))
        for k := range m {
                list = append(list, k)
        }
index 823cfd74dc65d4f1dd2857d7f32cfcff95f87240..ffcf531fecc49d57b1ca2e7f69f4f7b9d1a9533d 100644 (file)
@@ -389,7 +389,7 @@ func (v *jsonFlag) Set(s string) error {
 }
 
 func (v *jsonFlag) String() string {
-       var fields []string
+       fields := make([]string, 0, len(*v))
        for f := range *v {
                fields = append(fields, f)
        }
index 301090670cce92757a24c7f0d674401df0c9e495..535876c513fae6bfa461e9754d77a9b112cbcab6 100644 (file)
@@ -94,7 +94,7 @@ func defaultGODEBUG(p *Package, directives, testDirectives, xtestDirectives []bu
                m = defaults
        }
 
-       var keys []string
+       keys := make([]string, 0, len(m))
        for k := range m {
                keys = append(keys, k)
        }
index 4bc3e20af50e158948d192e74edb65bcfdc2373b..50a4526eb3ca64feed8864757a50e8234dee934c 100644 (file)
@@ -319,7 +319,7 @@ func (r *gitRepo) Tags(ctx context.Context, prefix string) (*Tags, error) {
 // the absence of a specific module version.
 // The caller must supply refs, the result of a successful r.loadRefs.
 func (r *gitRepo) repoSum(refs map[string]string) string {
-       var list []string
+       list := make([]string, 0, len(refs))
        for ref := range refs {
                list = append(list, ref)
        }
index 5cf63c45f7121c96513636f64637bdffb1951cef..791d4d8dc1044da2aa2dc4fec50d0e2843845ebf 100644 (file)
@@ -915,7 +915,7 @@ func tidyGoSum(data []byte, keep map[module.Version]bool) []byte {
                }
        }
 
-       var mods []module.Version
+       mods := make([]module.Version, 0, len(goSum.m))
        for m := range goSum.m {
                mods = append(mods, m)
        }
index bb29651810d9206c113a2c460d5030b69583d11e..05bac54fe7b604b97f11355236a5dfdf01a30567 100644 (file)
@@ -763,8 +763,9 @@ func (r *resolver) performLocalQueries(ctx context.Context) {
                        pkgPattern, mainModule := modload.MainModules.DirImportPath(ctx, q.pattern)
                        if pkgPattern == "." {
                                modload.MustHaveModRoot()
-                               var modRoots []string
-                               for _, m := range modload.MainModules.Versions() {
+                               versions := modload.MainModules.Versions()
+                               modRoots := make([]string, 0, len(versions))
+                               for _, m := range versions {
                                        modRoots = append(modRoots, modload.MainModules.ModRoot(m))
                                }
                                var plural string
index f513b0c8b0fdc8ac76308cf4fe9432f8b518ad11..c41bfc38afb59c6bb9c5874c280b4804c21106c5 100644 (file)
@@ -993,10 +993,11 @@ func loadModFile(ctx context.Context, opts *PackageOpts) (*Requirements, error)
 
        if cfg.BuildMod == "vendor" {
                readVendorList(VendorDir())
-               var indexes []*modFileIndex
-               var modFiles []*modfile.File
-               var modRoots []string
-               for _, m := range MainModules.Versions() {
+               versions := MainModules.Versions()
+               indexes := make([]*modFileIndex, 0, len(versions))
+               modFiles := make([]*modfile.File, 0, len(versions))
+               modRoots := make([]string, 0, len(versions))
+               for _, m := range versions {
                        indexes = append(indexes, MainModules.Index(m))
                        modFiles = append(modFiles, MainModules.ModFile(m))
                        modRoots = append(modRoots, MainModules.ModRoot(m))
index a97d975e2251e2aa903fce4e280389e6c0111bb8..621ce4a402c7af40e32fcf5630bed4b115cee2df 100644 (file)
@@ -128,7 +128,7 @@ func runRun(ctx context.Context, cmd *base.Command, args []string) {
                        base.Fatalf("go: no packages loaded from %s", arg)
                }
                if len(pkgs) > 1 {
-                       var names []string
+                       names := make([]string, 0, len(pkgs))
                        for _, p := range pkgs {
                                names = append(names, p.ImportPath)
                        }
index 9b050c7a6da7d202fbb252353d7f00d2e6fa1672..450c2ed8f8ad4c61774144526f5d2bbca772ff7c 100644 (file)
@@ -361,8 +361,9 @@ func ImportPaths(patterns, modRoots []string) []*Match {
 
 // ImportPathsQuiet is like ImportPaths but does not warn about patterns with no matches.
 func ImportPathsQuiet(patterns, modRoots []string) []*Match {
-       var out []*Match
-       for _, a := range CleanPatterns(patterns) {
+       patterns = CleanPatterns(patterns)
+       out := make([]*Match, 0, len(patterns))
+       for _, a := range patterns {
                m := NewMatch(a)
                if m.IsLocal() {
                        m.MatchDirs(modRoots)
@@ -399,7 +400,7 @@ func CleanPatterns(patterns []string) []string {
        if len(patterns) == 0 {
                return []string{"."}
        }
-       var out []string
+       out := make([]string, 0, len(patterns))
        for _, a := range patterns {
                var p, v string
                if build.IsLocalImport(a) || filepath.IsAbs(a) {
index d460259105ccc1a21fc76c1c2e60d473f9de8936..fcbf27ddae208620eff6097f1028d8c8f04a5a4e 100644 (file)
@@ -101,7 +101,7 @@ func NewServer() (srv *Server, err error) {
        vcs.VCSTestRepoURL = srv.HTTP.URL
        vcs.VCSTestHosts = Hosts
 
-       var interceptors []web.Interceptor
+       interceptors := make([]web.Interceptor, 0, 2*len(Hosts))
        for _, host := range Hosts {
                interceptors = append(interceptors,
                        web.Interceptor{Scheme: "http", FromHost: host, ToHost: httpURL.Host, Client: srv.HTTP.Client()},
index 9d481412c210f833df4525270c973d59b64eb707..ec384b6d9b09ddff866d1ffa25804047846cb9cb 100644 (file)
@@ -208,7 +208,7 @@ func actionGraphJSON(a *Action) string {
                }
        }
 
-       var list []*actionJSON
+       list := make([]*actionJSON, 0, len(workq))
        for id, a := range workq {
                if a.json == nil {
                        a.json = &actionJSON{
index a04794bbe5cb7864a7c0b29e9602c0bb01756e48..9959928da7e9a13712fd2ec76b16e69926253650 100644 (file)
@@ -469,7 +469,7 @@ func toolVerify(a *Action, b *Builder, p *load.Package, newTool string, ofile st
 }
 
 func (gcToolchain) pack(b *Builder, a *Action, afile string, ofiles []string) error {
-       var absOfiles []string
+       absOfiles := make([]string, 0, len(ofiles))
        for _, f := range ofiles {
                absOfiles = append(absOfiles, mkAbs(a.Objdir, f))
        }
index 84d8c9e35063fb47c77736d0bb75a8e7b7707d18..3e4c204ad1686016561e311b865209c248c40f22 100644 (file)
@@ -230,7 +230,7 @@ func (tools gccgoToolchain) pack(b *Builder, a *Action, afile string, ofiles []s
        p := a.Package
        sh := b.Shell(a)
        objdir := a.Objdir
-       var absOfiles []string
+       absOfiles := make([]string, 0, len(ofiles))
        for _, f := range ofiles {
                absOfiles = append(absOfiles, mkAbs(objdir, f))
        }