aboutsummaryrefslogtreecommitdiff
path: root/src/encoding
diff options
context:
space:
mode:
authorTomasz Jezierski <tjomek.jezierski@gmail.com>2022-08-01 21:18:36 +0200
committerRob Pike <r@golang.org>2022-08-08 06:16:59 +0000
commit0f6ee42fe063a48d7825bc03097bbb714aafdb7d (patch)
treed11165f96ebb63d30d49583143ee31a234bb4452 /src/encoding
parent0c4db1e347dc51589e5289388305b02108ca0aa1 (diff)
downloadgo-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.go9
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: