]> Cypherpunks repositories - gostls13.git/commitdiff
os/exec: provide map size hint in dedupEnvCase
authorJosh Bleecher Snyder <josharian@gmail.com>
Sat, 2 Mar 2019 19:14:33 +0000 (11:14 -0800)
committerJosh Bleecher Snyder <josharian@gmail.com>
Sat, 2 Mar 2019 20:11:47 +0000 (20:11 +0000)
The common case is that most env vars are distinct;
optimize for that.

name        old time/op    new time/op    delta
ExecEcho-8    2.16ms ± 3%    2.14ms ± 1%     ~     (p=0.315 n=10+10)

name        old alloc/op   new alloc/op   delta
ExecEcho-8    7.87kB ± 0%    6.35kB ± 0%  -19.31%  (p=0.000 n=9+10)

name        old allocs/op  new allocs/op  delta
ExecEcho-8      72.0 ± 0%      69.0 ± 0%   -4.17%  (p=0.000 n=10+10)

Change-Id: I42bb696c6862f2ea12c5cbd2f24c64336a7a759a
Reviewed-on: https://go-review.googlesource.com/c/164960
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/os/exec/exec.go

index 1aa3ab93dcc126d8803ded05ae6a843ee4fa80a8..7b2b2ebd929113a01c86284d1cf3a36d509efdc3 100644 (file)
@@ -713,7 +713,7 @@ func dedupEnv(env []string) []string {
 // If caseInsensitive is true, the case of keys is ignored.
 func dedupEnvCase(caseInsensitive bool, env []string) []string {
        out := make([]string, 0, len(env))
-       saw := map[string]int{} // key => index into out
+       saw := make(map[string]int, len(env)) // key => index into out
        for _, kv := range env {
                eq := strings.Index(kv, "=")
                if eq < 0 {