ホームページ > バックエンド開発 > Golang > Golang でのスライス追加と直接代入はどちらが速いですか?

Golang でのスライス追加と直接代入はどちらが速いですか?

Susan Sarandon
リリース: 2024-11-15 02:34:02
オリジナル
608 人が閲覧しました

Which is Faster: Slice Append or Direct Assignment in Golang?

Golang でのスライスの追加と割り当てのパフォーマンスの比較

Golang では、要素をスライスに追加する一般的な方法が 2 つあります。 append 関数を使用するか、スライス インデックスに値を直接割り当てます。これらのメソッド間のパフォーマンスの違いを理解するには、次のコードを考慮してください。

func BenchmarkSliceAppend(b *testing.B) {
    a := make([]int, 0, b.N)
    for i := 0; i < b.N; i++ {
        a = append(a, i)
    }
}

func BenchmarkSliceSet(b *testing.B) {
    a := make([]int, b.N)
    for i := 0; i < b.N; i++ {
        a[i] = i
    }
}
ログイン後にコピー

ベンチマークの結果は、実行時間の点で a[i] = i が a = append(a, i) よりも大幅に優れていることを示しています。

BenchmarkSliceAppend-4  200000000                7.87 ns/op            8 B/op          0 allocs/op
BenchmarkSliceSet-4     300000000                5.76 ns/op            8 B/op
ログイン後にコピー

パフォーマンスの違いの理由

パフォーマンスの違いの原因は次のとおりです。各メソッドによって実行される基本的な操作。 a[i] = i は値 i をスライスの i 番目の要素に割り当てるだけであり、簡単で効率的な操作です。

対照的に、a = append(a, i) にはより複雑なプロセスが含まれます。

  1. append() 関数は、現在のスライス a よりも 1 大きいサイズの新しいスライスを作成します。
  2. a の要素をコピーします。新しいスライス。
  3. 値 i を新しいスライスの最後の要素に割り当てます。
  4. 新しいスライスが返され、変数 a に割り当てられます。

この追加のコピーと割り当ては、追加メソッドのパフォーマンスのオーバーヘッドに寄与し、直接メソッドと比較して実行時間が遅くなります。 assign.

結論

要素をスライスに追加する場合、a[i] = i は a = append(a, i) よりも効率的なオプションです。操作がより簡単かつ高速になりました。スライス操作タスクのコード パフォーマンスを最適化するときは、この点に留意してください。

以上がGolang でのスライス追加と直接代入はどちらが速いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート