mirror of
https://github.com/golang/go
synced 2024-11-22 15:34:53 -07:00
bytes: don't compact Buffer so aggressively
benchmark old ns/op new ns/op delta BenchmarkBufferNotEmptyWriteRead 848416 819983 -3.35% Update #5154 R=golang-dev, gri, robryk CC=golang-dev https://golang.org/cl/8173043
This commit is contained in:
parent
994f59666f
commit
43e38d5def
@ -87,9 +87,11 @@ func (b *Buffer) grow(n int) int {
|
||||
var buf []byte
|
||||
if b.buf == nil && n <= len(b.bootstrap) {
|
||||
buf = b.bootstrap[0:]
|
||||
} else if m+n <= cap(b.buf) {
|
||||
// We can slide things down instead of
|
||||
// allocating a new slice.
|
||||
} else if m+n <= cap(b.buf)/2 {
|
||||
// We can slide things down instead of allocating a new
|
||||
// slice. We only need m+n <= cap(b.buf) to slide, but
|
||||
// we instead let capacity get twice as large so we
|
||||
// don't spend all our time copying.
|
||||
copy(b.buf[:], b.buf[b.off:])
|
||||
buf = b.buf[:m]
|
||||
} else {
|
||||
|
@ -490,8 +490,10 @@ func TestBufferGrowth(t *testing.T) {
|
||||
}
|
||||
}
|
||||
cap1 := b.Cap()
|
||||
if cap1 > cap0 {
|
||||
t.Errorf("buffer cap = %d; too big", cap1)
|
||||
// (*Buffer).grow allows for 2x capacity slop before sliding,
|
||||
// so set our error threshold at 3x.
|
||||
if cap1 > cap0*3 {
|
||||
t.Errorf("buffer cap = %d; too big (grew from %d)", cap1, cap0)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user