Go でのマップ初期化の「make」と「{}」の間にパフォーマンスの違いはありますか?

Linda Hamilton
リリース: 2024-11-01 05:08:27
オリジナル
688 人が閲覧しました

Is There a Performance Difference Between `make` and `{}` for Map Initialization in Go?

Go でのマップ初期化メソッドのパフォーマンス比較: make と {}

Go では、2 つのプライマリメソッドを使用してマップを初期化できます。メソッド:

<code class="go">var myMap map[string]int
myMap = map[string]int{}</code>
ログイン後にコピー

<code class="go">myMap = make(map[string]int)</code>
ログイン後にコピー

これらのアプローチ間に顕著なパフォーマンスの違いがあるかどうかという疑問が生じます。

パフォーマンス評価

パフォーマンスを評価するために、カスタム テスト パッケージを使用してベンチマーク テストを実施しました。複数の実行にわたる結果は、2 つの方法間の差異が無視できる程度であることを示しました。以下はベンチマーク コードのサンプルです。

<code class="go">package bench

import "testing"

var result map[string]int

func BenchmarkMakeLiteral(b *testing.B) {
    var m map[string]int
    for n := 0; n < b.N; n++ {
        m = InitMapLiteral()
    }
    result = m
}

func BenchmarkMakeMake(b *testing.B) {
    var m map[string]int
    for n := 0; n < b.N; n++ {
        m = InitMapMake()
    }
    result = m
}

func InitMapLiteral() map[string]int {
    return map[string]int{}
}

func InitMapMake() map[string]int {
    return make(map[string]int)
}</code>
ログイン後にコピー

ベンチマーク結果

3 回の個別の実行のベンチマーク結果は次のとおりです。

$ go test -bench=.
testing: warning: no tests to run
PASS
BenchmarkMakeLiteral-8  10000000               160 ns/op
BenchmarkMakeMake-8     10000000               171 ns/op
ok      github.com/johnweldon/bench     3.664s
ログイン後にコピー
$ go test -bench=.
testing: warning: no tests to run
PASS
BenchmarkMakeLiteral-8  10000000               182 ns/op
BenchmarkMakeMake-8     10000000               173 ns/op
ok      github.com/johnweldon/bench     3.945s
ログイン後にコピー
$ go test -bench=.
testing: warning: no tests to run
PASS
BenchmarkMakeLiteral-8  10000000               170 ns/op
BenchmarkMakeMake-8     10000000               170 ns/op
ok      github.com/johnweldon/bench     3.751s
ログイン後にコピー

結論

これらのベンチマーク結果に基づくと、map[string] を使用したマップの初期化の間に大きなパフォーマンスの違いはありません。 int{} と make(map[string]int)。どちらの方法も、サンプル マシンではほぼ同じパフォーマンスを示します。

以上がGo でのマップ初期化の「make」と「{}」の間にパフォーマンスの違いはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!