Golang スライス: 追加と割り当てのパフォーマンス
Golang では、要素をスライスに追加する一般的な方法が 2 つあります。関数または直接割り当てによって。どちらの方法でも同じ結果が得られますが、パフォーマンス特性は大きく異なります。
追加操作
追加関数は、新しいスライスを作成することによって、1 つ以上の要素を既存のスライスに追加します。十分な容量のスライス。その後、新しいスライスが元の変数に割り当てられます。これには、スライス ヘッダーのコピー、可変個引数パラメーターの一時スライスの作成、必要に応じて元のスライスの再スライスなど、いくつかの手順が含まれます。
代入操作
直接代入一方、スライス内の要素に値を割り当てるだけです。これは、単一の要素の値を更新するだけのより単純な操作です。
パフォーマンスの比較
これら 2 つの操作のベンチマークを行うと、直接割り当て (a[i ] = i) は、一貫して append (a = append(a, i)) よりも優れたパフォーマンスを発揮します。これは主に、直接割り当ての方が手順がはるかに少なく、新しいスライスを作成する必要がないためです。
パフォーマンスの違いの理由
この違いの理由は次のとおりです。追加関数の実装。 append 関数は、新しい要素をスライスに追加するだけでなく、スライス ヘッダーも更新します。これにより、追加操作を繰り返し実行するときに重大なオーバーヘッドが発生する可能性があります。
一方、直接代入では、スライス内の 1 つの要素の値のみが変更され、スライス ヘッダーには影響しません。これにより、単一要素の追加操作がより効率的になります。
結論
パフォーマンスが懸念される場合は、直接代入 (a[i] = i) を使用する必要があります。単一要素の追加では、append 関数よりも優先されます。ただし、複数の要素を一度に追加する必要がある場合は、依然として append 関数の方が便利で慣用的なアプローチです。
以上がGolang スライス: 直接割り当ては追加よりも常に高速ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。