ホームページ >バックエンド開発 >Golang >C の memset と同様に、Go で配列を効率的に初期化するにはどうすればよいですか?

C の memset と同様に、Go で配列を効率的に初期化するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-25 20:03:11241ブラウズ

How Can I Efficiently Initialize Arrays in Go, Similar to C  's memset?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。