reflect: reduce allocations for Select with up to 4 cases
Allocate the runcases slice on the stack if the number of select cases is small (up to 4). Found while looking at production profiles of common proto based RPC server framework code in Google which do not have a large number of cases. name old time/op new time/op delta Select/1 147ns ± 2% 120ns ± 6% -18.32% (p=0.000 n=7+10) Select/4 316ns ± 5% 249ns ± 2% -21.23% (p=0.000 n=10+10) Select/8 516ns ± 3% 515ns ± 3% ~ (p=0.858 n=10+9) name old alloc/op new alloc/op delta Select/1 96.0B ± 0% 64.0B ± 0% -33.33% (p=0.000 n=10+10) Select/4 336B ± 0% 208B ± 0% -38.10% (p=0.000 n=10+10) Select/8 672B ± 0% 672B ± 0% ~ (all equal) name old allocs/op new allocs/op delta Select/1 4.00 ± 0% 3.00 ± 0% -25.00% (p=0.000 n=10+10) Select/4 7.00 ± 0% 6.00 ± 0% -14.29% (p=0.000 n=10+10) Select/8 11.0 ± 0% 11.0 ± 0% ~ (all equal) Change-Id: I1687e74fc8e86606a27f03fa8a561bcfb68775d6 Reviewed-on: https://go-review.googlesource.com/c/go/+/230657 Run-TryBot: Martin Möhrmann <moehrmann@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:Keith Randall <khr@golang.org>
Loading
Please sign in to comment