1
0
mirror of https://github.com/golang/go synced 2024-09-30 16:18:35 -06:00

strconv: simplify and optimize Itoa(small)

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>
This commit is contained in:
Marvin Stenger 2018-05-03 12:28:43 +02:00 committed by Brad Fitzpatrick
parent 63756e0c8f
commit 3c0bf181b7
2 changed files with 10 additions and 7 deletions

View 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

View 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)
}
})
}
}