ホームページ >バックエンド開発 >Golang >最初は空の Go マップにはどれくらいのメモリが割り当てられますか?

最初は空の Go マップにはどれくらいのメモリが割り当てられますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-24 19:31:15407ブラウズ

How Much Memory Does an Initially Empty Go Map Allocate?

Go マップのメモリ割り当て: 実装固有の調査

Go マッピングの世界では、メモリ割り当てには謎が存在します。マップの初期化時に初期容量パラメータが存在しないため、割り当てられるスペースのサイズは実装の気まぐれに左右されます。しかし、この隠された割り当ての秘密を明らかにするにはどうすればよいでしょうか?

Go マップのソース コードを深く掘り下げると、ヘッダーとバケットの配列で構成される構造が明らかになります。初期スペースが指定されていない場合、マップは 1 つのバケットのみで構成されます。

ヘッダー自体はまさに迷路のようなフィールドです:

  • 1 int
  • 1 uint8
  • 1 uint16
  • 1 uint32
  • 2 unsafe.Pointer
  • 1 uintptr

64 ビット マシンでは、int、uintptr、および unsafe.Pointer のサイズはワード サイズと一致します。 (8バイト)。この構成により、ヘッダーとして合計 40 バイトが生成されます。

次に、8 つの uint8 要素の配列を格納するバケットに注目してみましょう。これにより、全体の合計に 8 バイトが追加されます。

これらのコンポーネントを組み合わせると、合計 48 バイトになります (64 ビット アーキテクチャの場合)。この知識があれば、Go のマップ メモリ割り当てを取り巻く不確実性のベールを自信を持って打ち破ることができます。

以上が最初は空の Go マップにはどれくらいのメモリが割り当てられますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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