diff options
| author | Tomasz Jezierski <tjomek.jezierski@gmail.com> | 2022-08-01 21:18:36 +0200 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2022-08-08 06:16:59 +0000 |
| commit | 0f6ee42fe063a48d7825bc03097bbb714aafdb7d (patch) | |
| tree | d11165f96ebb63d30d49583143ee31a234bb4452 /src/encoding | |
| parent | 0c4db1e347dc51589e5289388305b02108ca0aa1 (diff) | |
| download | go-0f6ee42fe063a48d7825bc03097bbb714aafdb7d.tar.xz | |
encoding/gob: replace runtime values with constants in init()
Current init() implementation in `encoding/gob/decode.go` checks int/uint/uintptr bit size with reflection in runtime. We could replace it with values available on compile stage. This should reduce time and allocations on binary start.
Results from GODEBUG=inittrace=1:
before:
init encoding/gob @4.4 ms, 0.21 ms clock, 43496 bytes, 652 allocs
after:
init encoding/gob @4.4 ms, 0.15 ms clock, 41672 bytes, 643 allocs
Updates #54184
Change-Id: I46dda2682fb92519da199415e29401d61edce697
Reviewed-on: https://go-review.googlesource.com/c/go/+/420455
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Rob Pike <r@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Diffstat (limited to 'src/encoding')
| -rw-r--r-- | src/encoding/gob/decode.go | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/encoding/gob/decode.go b/src/encoding/gob/decode.go index eea2924f1a..7bca13c957 100644 --- a/src/encoding/gob/decode.go +++ b/src/encoding/gob/decode.go @@ -1228,9 +1228,14 @@ func (dec *Decoder) decodeIgnoredValue(wireId typeId) { } } +const ( + intBits = 32 << (^uint(0) >> 63) + uintptrBits = 32 << (^uintptr(0) >> 63) +) + func init() { var iop, uop decOp - switch reflect.TypeOf(int(0)).Bits() { + switch intBits { case 32: iop = decInt32 uop = decUint32 @@ -1244,7 +1249,7 @@ func init() { decOpTable[reflect.Uint] = uop // Finally uintptr - switch reflect.TypeOf(uintptr(0)).Bits() { + switch uintptrBits { case 32: uop = decUint32 case 64: |
