• Robert Griesemer's avatar
    strconv: replace small int string table with constant string · aea44109
    Robert Griesemer authored
    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/38319Reviewed-by: 's avatarMartin Möhrmann <moehrmann@google.com>
    aea44109
itoa.go 4.54 KB