]> Cypherpunks repositories - gostls13.git/commit
runtime: use old capacity to decide on append growth regime
authorKeith Randall <khr@golang.org>
Fri, 25 Sep 2020 02:26:33 +0000 (19:26 -0700)
committerKeith Randall <khr@golang.org>
Fri, 25 Sep 2020 03:59:54 +0000 (03:59 +0000)
commit2333c6299f340a5f76a73a4fec6db23ffa388e97
treef389380ff340902987186e7fff7ac6f7f0a3bddb
parentfa04d488bd54b8fdd78cc9bcc6d90de4bf5f8efb
runtime: use old capacity to decide on append growth regime

We grow the backing store on append by 2x for small sizes and 1.25x
for large sizes. The threshold we use for picking the growth factor
used to depend on the old length, not the old capacity. That's kind of
unfortunate, because then doing append(s, 0, 0) and append(append(s,
0), 0) do different things. (If s has one more spot available, then
the former expression chooses its growth based on len(s) and the
latter on len(s)+1.)  If we instead use the old capacity, we get more
consistent behavior. (Both expressions use len(s)+1 == cap(s) to
decide.)

Fixes #41239

Change-Id: I40686471d256edd72ec92aef973a89b52e235d4b
Reviewed-on: https://go-review.googlesource.com/c/go/+/257338
Trust: Keith Randall <khr@golang.org>
Trust: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
src/runtime/slice.go
test/fixedbugs/issue41239.go [new file with mode: 0644]