]> Cypherpunks repositories - gostls13.git/commit
encoding/binary: use an offset instead of slicing
authorJosh Bleecher Snyder <josharian@gmail.com>
Mon, 5 Mar 2018 15:40:14 +0000 (07:40 -0800)
committerJosh Bleecher Snyder <josharian@gmail.com>
Tue, 6 Mar 2018 18:59:03 +0000 (18:59 +0000)
commitb85433975aedc2be2971093b6bbb0a7dc264c8fd
tree961c9a4338f1d84cd30c8ec6e24cfb4b7fd6d168
parentf7739c07c8f6ef9bfa28e8c4a4527b01cf3991bc
encoding/binary: use an offset instead of slicing

While running make.bash, over 5% of all pointer writes
come from encoding/binary doing struct reads.

This change replaces slicing during such reads with an offset.
This avoids updating the slice pointer with every
struct field read or write.

This has no impact when the write barrier is off.
Running the benchmarks with GOGC=1, however,
shows significant improvement:

name          old time/op    new time/op    delta
ReadStruct-8    13.2µs ± 6%    10.1µs ± 5%  -23.24%  (p=0.000 n=10+10)

name          old speed      new speed      delta
ReadStruct-8  5.69MB/s ± 6%  7.40MB/s ± 5%  +30.18%  (p=0.000 n=10+10)

Change-Id: I22904263196bfeddc38abe8989428e263aee5253
Reviewed-on: https://go-review.googlesource.com/98757
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/encoding/binary/binary.go