スライスに要素を詰めていく時のお話
5404 ワード
はじめに
スライスに要素を詰めていく時に、記述の仕方でどれくらいパフォーマンス変わってくるかベンチマークで検証。
パフォーマンスチューニングにて活かしたい。
appendを使う場合
要素数分capacityを確保しておくと良い。
例えば要素数が10であるときはcapacityで10を指定しておく。
func makeSlice() {
s := make([]int, 0, 10)
for i:=0; i<10; i++ {
s = append(s, i)
}
}
BenchmarkMakeSlice-4 83859099 13.5 ns/op
PASS
ok awesomeProject2 1.157s
確保できていない場合、例えばcapacityを5とした時、
func makeSlice() {
s := make([]int, 0, 5)
for i:=0; i<10; i++ {
s = append(s, i)
}
}
BenchmarkMakeSlice-4 17901537 61.9 ns/op
PASS
ok awesomeProject2 1.187s
capacityを3とした時、
BenchmarkMakeSlice-4 10131793 118 ns/op
PASS
ok awesomeProject2 1.327s
以下の場合、
func makeSlice() {
var s []int
for i:=0; i<10; i++ {
s = append(s, i)
}
}
BenchmarkMakeSlice-4 4877806 246 ns/op
PASS
ok awesomeProject2 1.468s
事前に要素数がわかっている場合はインデックスを活用
事前に要素数がわかっている場合は、インデックスを活用して代入していく方がappendを用いるよりも速くなる。
func makeSlice() {
s := make([]int, 10)
for i:=0; i<10; i++ {
s[i]=i
}
}
BenchmarkMakeSlice-4 184096501 6.39 ns/op
PASS
ok awesomeProject2 1.844s
Author And Source
この問題について(スライスに要素を詰めていく時のお話), 我々は、より多くの情報をここで見つけました https://qiita.com/kt-321/items/b14bd0485b970e6689e0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .