1
0
mirror of https://github.com/golang/go synced 2024-11-17 14:44:44 -07:00

encoding/binary: remove TODO in Write and add benchmarks

Benchmarks:
goos: linux
goarch: amd64
BenchmarkReadSlice1000Uint8s-8           4097088               296 ns/op        3381.06 MB/s
BenchmarkWriteSlice1000Uint8s-8          4372588               271 ns/op        3694.96 MB/s

Change-Id: I5b6ef0da5052e3381ee9c714bbff541c11ed0259
Reviewed-on: https://go-review.googlesource.com/c/go/+/246837
Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Alberto Donizetti <alb.donizetti@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Alberto Donizetti <alb.donizetti@gmail.com>
This commit is contained in:
zhouzhongyuan 2020-08-05 15:08:54 +08:00 committed by Ian Lance Taylor
parent 0a9dd47dd8
commit 83bc1ed316
2 changed files with 25 additions and 1 deletions

View File

@ -306,7 +306,7 @@ func Write(w io.Writer, order ByteOrder, data interface{}) error {
case uint8: case uint8:
bs[0] = v bs[0] = v
case []uint8: case []uint8:
bs = v // TODO(josharian): avoid allocating bs in this case? bs = v
case *int16: case *int16:
order.PutUint16(bs, uint16(*v)) order.PutUint16(bs, uint16(*v))
case int16: case int16:

View File

@ -706,3 +706,27 @@ func BenchmarkWriteSlice1000Float32s(b *testing.B) {
} }
b.StopTimer() b.StopTimer()
} }
func BenchmarkReadSlice1000Uint8s(b *testing.B) {
bsr := &byteSliceReader{}
slice := make([]uint8, 1000)
buf := make([]byte, len(slice))
b.SetBytes(int64(len(buf)))
b.ResetTimer()
for i := 0; i < b.N; i++ {
bsr.remain = buf
Read(bsr, BigEndian, slice)
}
}
func BenchmarkWriteSlice1000Uint8s(b *testing.B) {
slice := make([]uint8, 1000)
buf := new(bytes.Buffer)
var w io.Writer = buf
b.SetBytes(1000)
b.ResetTimer()
for i := 0; i < b.N; i++ {
buf.Reset()
Write(w, BigEndian, slice)
}
}