• Josh Bleecher Snyder's avatar
    os: allocate buffer lazily in Expand · 86181120
    Josh Bleecher Snyder authored
    As an example of why this might happen,
    consider this code from cmd/internal/objfile:
    
    // Expand literal "$GOROOT" rewritten by obj.AbsFile()
    filename = filepath.Clean(os.ExpandEnv(filename))
    
    In this case, filename might not contain "$GOROOT",
    in which case we can skip the buffer entirely.
    
    name               old time/op    new time/op    delta
    Expand/noop-8        46.7ns ± 1%    12.9ns ± 1%   -72.47%  (p=0.000 n=9+9)
    Expand/multiple-8     139ns ± 1%     137ns ± 1%    -1.36%  (p=0.001 n=10+10)
    
    The Expand/multiple improvement is probably noise.
    
    This speeds up cmd/objdump detectably, if not much.
    Using "benchcmd ObjdumpCompile go tool objdump `go tool -n compile`":
    
    name            old time/op       new time/op       delta
    ObjdumpCompile        9.35s ± 2%        9.07s ± 3%  -3.00%  (p=0.000 n=18+18)
    
    Updates #24725
    
    Change-Id: Id31ec6a9b8dfb3c0f1db58fe1f958e11c39e656c
    Reviewed-on: https://go-review.googlesource.com/106697
    Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    86181120
Name
Last commit
Last update
..
exec Loading commit data...
signal Loading commit data...
user Loading commit data...
dir.go Loading commit data...
dir_plan9.go Loading commit data...
dir_unix.go Loading commit data...
dir_windows.go Loading commit data...
env.go Loading commit data...
env_test.go Loading commit data...
env_unix_test.go Loading commit data...
error.go Loading commit data...
error_plan9.go Loading commit data...
error_posix.go Loading commit data...
error_test.go Loading commit data...
error_unix.go Loading commit data...
error_unix_test.go Loading commit data...
error_windows.go Loading commit data...
error_windows_test.go Loading commit data...
example_test.go Loading commit data...
exec.go Loading commit data...
exec_plan9.go Loading commit data...
exec_posix.go Loading commit data...
exec_unix.go Loading commit data...
exec_windows.go Loading commit data...
executable.go Loading commit data...
executable_darwin.go Loading commit data...
executable_freebsd.go Loading commit data...
executable_path.go Loading commit data...
executable_plan9.go Loading commit data...
executable_procfs.go Loading commit data...
executable_solaris.go Loading commit data...
executable_test.go Loading commit data...
executable_windows.go Loading commit data...
export_test.go Loading commit data...
export_windows_test.go Loading commit data...
file.go Loading commit data...
file_plan9.go Loading commit data...
file_posix.go Loading commit data...
file_unix.go Loading commit data...
file_windows.go Loading commit data...
getwd.go Loading commit data...
getwd_darwin.go Loading commit data...
os_test.go Loading commit data...
os_unix_test.go Loading commit data...
os_windows_test.go Loading commit data...
path.go Loading commit data...
path_plan9.go Loading commit data...
path_test.go Loading commit data...
path_unix.go Loading commit data...
path_windows.go Loading commit data...
path_windows_test.go Loading commit data...
pipe2_bsd.go Loading commit data...
pipe_bsd.go Loading commit data...
pipe_linux.go Loading commit data...
pipe_test.go Loading commit data...
proc.go Loading commit data...
stat.go Loading commit data...
stat_darwin.go Loading commit data...
stat_dragonfly.go Loading commit data...
stat_freebsd.go Loading commit data...
stat_linux.go Loading commit data...
stat_nacl.go Loading commit data...
stat_netbsd.go Loading commit data...
stat_openbsd.go Loading commit data...
stat_plan9.go Loading commit data...
stat_solaris.go Loading commit data...
stat_unix.go Loading commit data...
stat_windows.go Loading commit data...
sticky_bsd.go Loading commit data...
sticky_notbsd.go Loading commit data...
str.go Loading commit data...
sys.go Loading commit data...
sys_bsd.go Loading commit data...
sys_linux.go Loading commit data...
sys_nacl.go Loading commit data...
sys_plan9.go Loading commit data...
sys_solaris.go Loading commit data...
sys_unix.go Loading commit data...
sys_windows.go Loading commit data...
timeout_test.go Loading commit data...
types.go Loading commit data...
types_plan9.go Loading commit data...
types_unix.go Loading commit data...
types_windows.go Loading commit data...
wait_unimp.go Loading commit data...
wait_wait6.go Loading commit data...
wait_waitid.go Loading commit data...