ホームページ > バックエンド開発 > Golang > Go で配列を効率的に初期化する方法: memset の代替手段?

Go で配列を効率的に初期化する方法: memset の代替手段?

Barbara Streisand
リリース: 2024-12-31 05:00:12
オリジナル
959 人が閲覧しました

How to Efficiently Initialize Arrays in Go: memset Alternatives?

Go における memset の類似物

C では、 memset 関数は指定された値で配列を効率的に初期化します。ただし、Go には memset の直接サポートがありません。この記事では、同様の機能を実現するためのいくつかの代替アプローチについて説明します。

反復ループ ソリューション

ループを使用した簡単な実装は次のとおりです。

func memsetLoop(a []int, v int) {
    for i := range a {
        a[i] = v
    }
}
ログイン後にコピー

コピーベースのソリューション

最適化されたアプローチでは、効率的な 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])
    }
}
ログイン後にコピー

これソリューションは bytes.Repeat() の実装に似ています。同じ値で埋められた新しい []byte を作成するには、bytes.Repeat() をお勧めします。

ベンチマーク比較

パフォーマンス ベンチマークでは、memsetLoop() に対する memsetRepeat() の優位性が明らかになりました。配列サイズの増加:

Array Size memsetLoop memsetRepeat Improvement
100 ~1.15x slower ~1.15x faster
1,000 ~2.5x slower ~2.5x faster
10,000 ~2x slower ~2x faster
100,000 ~1.5x slower ~1.5x faster

約 3800 ~ 4000

結論

memset は Go ではネイティブにサポートされていませんが、memsetLoop() と memsetRepeat() は配列を初期化するための効率的な代替手段を提供します。ゼロ以外の値。 copy() を利用した memsetRepeat() は、より大きな配列の最適なソリューションとして浮上します。

以上がGo で配列を効率的に初期化する方法: memset の代替手段?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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