Go に相当する memset はありますか?
C では、 memset 関数を使用すると、特定の値を持つ配列を効率的に初期化できます。 Go では、直接同等のものはありませんが、いくつかの手法で同様の結果を達成できます。
ループ反復
最も簡単なアプローチは、ループを使用して次の各要素を設定することです。配列を目的の値に変換します。
func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }
繰り返しcopy()
高度に最適化された copy() 関数を利用すると、繰り返しコピー パターンを活用して配列値を効率的に設定できます。
func memsetRepeat(a []int, v int) { if len(a) == 0 { return } a[0] = v for bp := 1; bp < len(a); bp *= 2 { copy(a[bp:], a[:bp]) } }
ベンチマーク結果
これらの手法のパフォーマンスを評価するために、さまざまなアレイに対してそれらを相互にベンチマークします。
var a = make([]int, 1000) // Size will vary func BenchmarkLoop(b *testing.B) { for i := 0; i < b.N; i++ { memsetLoop(a, 10) } } func BenchmarkRepeat(b *testing.B) { for i := 0; i < b.N; i++ { memsetRepeat(a, 11) } }
結果は、大きな配列では memsetRepeat() が memsetLoop() よりも優れたパフォーマンスを示し、高速初期化の効率性を示しています。
以上がC の memset と同様に、Go で配列を効率的に初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。