ホームページ >バックエンド開発 >Golang >Go の C の memset に相当: ゼロ以外の値で配列を効率的に初期化するには?

Go の C の memset に相当: ゼロ以外の値で配列を効率的に初期化するには?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-20 00:38:13645ブラウズ

Go's Equivalent to C  's memset: How to Efficiently Initialize Arrays with Non-Zero Values?

Go C の memset と同等

元の質問:

メソッドはありますかGo では C の memset 関数に似ており、配列の効率的な初期化を可能にします。ゼロ以外の値を使用しますか?

答え:

Go は、標準ライブラリで memset と直接同等のものを提供しません。ただし、同様の機能を実現できるアプローチがいくつかあります。

ループベースのソリューション:

func memsetLoop(a []int, v int) {
    for i := range a {
        a[i] = v
    }
}

この単純なループは配列を反復処理し、値 v を割り当てます。

を使用して最適化されたソリューションcopy():

Go の 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])
    }
}

このソリューションでは、最初の要素を手動で設定し、その後、要素を繰り返しコピーします。配列の初期化された部分を残りの要素に配置します。

パフォーマンス比較:

ベンチマークは、最適化された copy() 関数により、memsetRepeat ソリューションが、より大きな配列に対するループベースのアプローチよりも優れていることを示しています。

要約すると、Go プログラマーは、シンプルにするループベースのソリューション、またはゼロ以外の値で配列を初期化する際のパフォーマンスを向上させる最適化された memsetRepeat ソリューション。

以上がGo の C の memset に相当: ゼロ以外の値で配列を効率的に初期化するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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