1
0
mirror of https://github.com/golang/go synced 2024-11-06 05:36:13 -07:00
go/src/strconv
Robert Griesemer aea44109cf strconv: replace small int string table with constant string
This reduces memory use yet still provides the significant
performance gain seen when using a fast path for small integers.

Improvement of this CL comparing to code without fast path:

name              old time/op  new time/op  delta
FormatIntSmall-8  35.6ns ± 1%   4.5ns ± 1%  -87.30%  (p=0.008 n=5+5)
AppendIntSmall-8  17.4ns ± 1%   9.4ns ± 3%  -45.70%  (p=0.008 n=5+5)

For comparison, here's the improvement before this CL to code without
fast path (1% better for FormatIntSmall):

name              old time/op  new time/op  delta
FormatIntSmall-8  35.6ns ± 1%   4.0ns ± 3%  -88.64%  (p=0.008 n=5+5)
AppendIntSmall-8  17.4ns ± 1%   8.2ns ± 1%  -52.80%  (p=0.008 n=5+5)

Thus, the code in this CL performs slower for small integers using fast
path then the prior version, but this is relative to an already very fast
version:

name              old time/op  new time/op  delta
FormatIntSmall-8  4.05ns ± 3%  4.52ns ± 1%  +11.81%  (p=0.008 n=5+5)
AppendIntSmall-8  8.21ns ± 1%  9.45ns ± 3%  +15.05%  (p=0.008 n=5+5)

Measured on 2.3 GHz Intel Core i7 running macOS Sierra 10.12.3.

Overall, it's still ~88% faster than without fast path for small integers,
so probably worth it as it removes 100 global string slices in favor of
a single string.

Credits: This is based on the original (but cleaned up) version of the
code by Aliaksandr Valialkin (https://go-review.googlesource.com/c/37963/).

Change-Id: Icda78679c8c14666d46257894e9fa3d7f35e58b8
Reviewed-on: https://go-review.googlesource.com/38319
Reviewed-by: Martin Möhrmann <moehrmann@google.com>
2017-03-17 20:33:46 +00:00
..
testdata
atob_test.go
atob.go
atof_test.go
atof.go
atoi_test.go
atoi.go
decimal_test.go
decimal.go
doc.go
example_test.go
extfloat.go
fp_test.go
ftoa_test.go
ftoa.go
internal_test.go
isprint.go
itoa_test.go strconv: optimize formatting for small decimal ints 2017-03-16 19:58:51 +00:00
itoa.go strconv: replace small int string table with constant string 2017-03-17 20:33:46 +00:00
makeisprint.go
quote_test.go strconv: strip \r in raw strings passed to Unquote 2016-10-17 18:34:02 +00:00
quote.go strconv: remove unused append rune width param 2017-03-06 04:37:13 +00:00
strconv_test.go