-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Closed
Labels
FrozenDueToAgeNeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.Performancecompiler/runtimeIssues related to the Go compiler and/or runtime.Issues related to the Go compiler and/or runtime.
Milestone
Description
What version of Go are you using (go version
)?
go version go1.12.2 linux/amd64
Does this issue reproduce with the latest release?
yes
What did you do?
package main
import (
"testing"
)
type T = int
var sx = []T{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
var sy = []T{111, 222, 333, 444}
var index = 6
func SliceInsertion_OneLine(base, inserted []T, i int) []T {
return append(base[:i], append(inserted, base[i:]...)...)
}
func SliceInsertion_Verbose(base, inserted []T, i int) []T {
if cap(base)-len(base) >= len(inserted) {
s := base[:len(base)+len(inserted)]
copy(s[i+len(inserted):], s[i:])
copy(s[i:], inserted)
return s
} else {
s := make([]T, 0, len(inserted)+len(base))
s = append(s, base[:i]...)
s = append(s, inserted...)
s = append(s, base[i:]...)
return s
}
}
var s1 []T
func Benchmark_SliceInsertion_OneLine(b *testing.B) {
for i := 0; i < b.N; i++ {
s1 = SliceInsertion_OneLine(sx, sy, index)
}
}
var s2 []T
func Benchmark_SliceInsertion_Verbose(b *testing.B) {
for i := 0; i < b.N; i++ {
s2 = SliceInsertion_Verbose(sx, sy, index)
}
}
What did you expect to see?
Small performance difference.
What did you see instead?
$ go test -bench=. -benchmem
goos: linux
goarch: amd64
pkg: app/t
Benchmark_SliceInsertion_OneLine-4 5000000 311 ns/op 368 B/op 2 allocs/op
Benchmark_SliceInsertion_Verbose-4 10000000 146 ns/op 160 B/op 1 allocs/op
PASS
ok app/t 3.535s
Metadata
Metadata
Assignees
Labels
FrozenDueToAgeNeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.Performancecompiler/runtimeIssues related to the Go compiler and/or runtime.Issues related to the Go compiler and/or runtime.