diff options
| author | Daniel Martí <mvdan@mvdan.cc> | 2023-03-25 12:04:59 +0000 |
|---|---|---|
| committer | Daniel Martí <mvdan@mvdan.cc> | 2023-03-29 23:48:11 +0000 |
| commit | f80e270babcddd28e29a52c1cb834ffed427bd8a (patch) | |
| tree | 03eda5945bfb47578ad51c048671406b247fd9be /src | |
| parent | 72013c47009d99c5ded7407bf80d90bd8ba95d3e (diff) | |
| download | go-f80e270babcddd28e29a52c1cb834ffed427bd8a.tar.xz | |
encoding/gob: avoid pointers to fieldType
fieldType is a struct with only a string and an integer,
so its size will barely be three times that of a pointer.
The indirection doesn't save us any memory or append/grow cost,
but it does cause a significant amount of allocations at init time.
goos: linux
goarch: amd64
pkg: encoding/gob
cpu: AMD Ryzen 7 PRO 5850U with Radeon Graphics
│ old │ new │
│ sec/op │ sec/op vs base │
EndToEndPipe-16 730.9n ± 5% 741.6n ± 5% ~ (p=0.529 n=10)
EncodingGob 173.7µ ± 0% 171.1µ ± 0% -1.46% (p=0.000 n=10)
geomean 11.27µ 11.26µ -0.01%
│ old │ new │
│ B/op │ B/op vs base │
EndToEndPipe-16 1.766Ki ± 0% 1.766Ki ± 0% ~ (p=1.000 n=10) ¹
EncodingGob 38.27Ki ± 0% 34.30Ki ± 0% -10.38% (p=0.000 n=10)
geomean 8.221Ki 7.782Ki -5.33%
¹ all samples are equal
│ old │ new │
│ allocs/op │ allocs/op vs base │
EndToEndPipe-16 2.000 ± 0% 2.000 ± 0% ~ (p=1.000 n=10) ¹
EncodingGob 642.0 ± 0% 615.0 ± 0% -4.21% (p=0.000 n=10)
geomean 35.83 35.07 -2.13%
¹ all samples are equal
Change-Id: I852a799834d2e9b7b915da74e871a4052d13892e
Reviewed-on: https://go-review.googlesource.com/c/go/+/479400
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Rob Pike <r@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/encoding/gob/type.go | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/encoding/gob/type.go b/src/encoding/gob/type.go index efaed68749..205a0b3694 100644 --- a/src/encoding/gob/type.go +++ b/src/encoding/gob/type.go @@ -406,7 +406,7 @@ type fieldType struct { type structType struct { CommonType - Field []*fieldType + Field []fieldType } func (s *structType) safeString(seen map[typeId]bool) string { @@ -549,7 +549,7 @@ func newTypeObject(name string, ut *userTypeInfo, rt reflect.Type) (gobType, err if gt.id() == 0 { setTypeId(gt) } - st.Field = append(st.Field, &fieldType{f.Name, gt.id()}) + st.Field = append(st.Field, fieldType{f.Name, gt.id()}) } return st, nil |
