• 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
Name
Last commit
Last update
.github Loading commit data...
api Loading commit data...
doc Loading commit data...
lib/time Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README.md Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...