diff options
author | Keith Randall <khr@golang.org> | 2016-02-22 13:20:38 -0800 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2016-02-23 00:15:38 +0000 |
commit | bd70bd9cb2f458b23222083a3a11190f080af7fd (patch) | |
tree | 77c35258aea9e50c677841ef02af3b6a63871c10 /src/runtime/string_test.go | |
parent | 1e00cc1647916b705682f8721b8a9e9e095bf4ee (diff) | |
download | go-bd70bd9cb2f458b23222083a3a11190f080af7fd.tar.gz go-bd70bd9cb2f458b23222083a3a11190f080af7fd.zip |
runtime: unify memeq and memequal
They do the same thing, except memequal also has the short-circuit
check if the two pointers are equal.
A) We might as well always do the short-circuit check, it is only 2 instructions.
B) The extra function call (memequal->memeq) is expensive.
benchmark old ns/op new ns/op delta
BenchmarkArrayEqual-8 8.56 5.31 -37.97%
No noticeable affect on the former memeq user (maps).
Fixes #14302
Change-Id: I85d1ada59ed11e64dd6c54667f79d32cc5f81948
Reviewed-on: https://go-review.googlesource.com/19843
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/runtime/string_test.go')
-rw-r--r-- | src/runtime/string_test.go | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/runtime/string_test.go b/src/runtime/string_test.go index 150a25520a..37b75c1a89 100644 --- a/src/runtime/string_test.go +++ b/src/runtime/string_test.go @@ -102,6 +102,17 @@ func BenchmarkRuneIterate2(b *testing.B) { } } +func BenchmarkArrayEqual(b *testing.B) { + a1 := [16]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} + a2 := [16]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} + b.ResetTimer() + for i := 0; i < b.N; i++ { + if a1 != a2 { + b.Fatal("not equal") + } + } +} + func TestStringW(t *testing.T) { strings := []string{ "hello", |