]> Cypherpunks repositories - gostls13.git/commitdiff
strconv: simplify and optimize Itoa(small)
authorMarvin Stenger <marvin.stenger94@gmail.com>
Thu, 3 May 2018 10:28:43 +0000 (12:28 +0200)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 3 May 2018 18:07:02 +0000 (18:07 +0000)
Use substring of digits for values < 10.

name                 old time/op  new time/op  delta
FormatIntSmall/7-4   4.54ns ± 1%  3.70ns ± 1%  -18.41%  (p=0.000 n=18+17)
FormatIntSmall/42-4  4.54ns ± 1%  4.13ns ± 1%   -9.02%  (p=0.000 n=16+18)

Change-Id: I0b521b563c13ef88aa2701049fa4a43760e884af
Reviewed-on: https://go-review.googlesource.com/111285
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/strconv/itoa.go
src/strconv/itoa_test.go

index 394716ccd76eb57b86281bd7d13f4a8545df2f5e..8afe7af2517db73bf1193b9e55f87b342954bec6 100644 (file)
@@ -57,11 +57,10 @@ func AppendUint(dst []byte, i uint64, base int) []byte {
 
 // small returns the string for an i with 0 <= i < nSmalls.
 func small(i int) string {
-       off := 0
        if i < 10 {
-               off = 1
+               return digits[i : i+1]
        }
-       return smallsString[i*2+off : i*2+2]
+       return smallsString[i*2 : i*2+2]
 }
 
 const nSmalls = 100
index 89c2de6941a3a09a4938b9c104ebe47c4377c084..b5ee3aa82803706ac623c66a498ebe7b6178d61f 100644 (file)
@@ -200,10 +200,14 @@ func BenchmarkAppendUint(b *testing.B) {
 }
 
 func BenchmarkFormatIntSmall(b *testing.B) {
-       const smallInt = 42
-       for i := 0; i < b.N; i++ {
-               s := FormatInt(smallInt, 10)
-               BenchSink += len(s)
+       smallInts := []int64{7, 42}
+       for _, smallInt := range smallInts {
+               b.Run(Itoa(int(smallInt)), func(b *testing.B) {
+                       for i := 0; i < b.N; i++ {
+                               s := FormatInt(smallInt, 10)
+                               BenchSink += len(s)
+                       }
+               })
        }
 }