mirror of https://github.com/golang/go.git
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>
This commit is contained in:
parent
0c4db1e347
commit
0f6ee42fe0
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue