ホームページ >バックエンド開発 >Golang >指定されていない Go マップはどれくらいのメモリを割り当てますか?

指定されていない Go マップはどれくらいのメモリを割り当てますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-18 15:19:25589ブラウズ

How Much Memory Does an Unspecified Go Map Allocate?

Golang マップのメモリ割り当て: 基礎となる構造を明らかにする

初期メモリ割り当てを指定せずに Go マップを作成する場合、実際のメモリ使用量は謎のままです。この記事では、実装によって割り当てられるメモリを決定する方法について説明します。

Go マップ実装からの洞察

Go マップ タイプのソース コードを詳しく調べると、マップが次の要素で構成されていることがわかります。 2 つのコンポーネント: ヘッダー (hmap) とバケットの配列 (bmap)。注目すべきことに、マップの作成時に初期割り当てが指定されていない場合、単一のバケットが割り当てられます。

ヘッダー (hmap) の構造

ヘッダーは 7 つのフィールドで構成されます:

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

64 ビット マシンでは、int のサイズ、 uintptr、および unsafe.Pointer はそれぞれ 8 バイトで、合計 40 バイトになります。ヘッダー用。

バケットの構造 (bmap)

バケットは、uint8 型の 8 つの要素を含む配列であり、追加の 8 バイトになります。

最終メモリ割り当て

したがって、1 つのバケットを持つマップに割り当てられるメモリは次のようになります。の:

  • ヘッダー サイズ: 40 バイト
  • バケット サイズ: 8 バイト
  • 合計サイズ: 48 バイト

この計算は64 ビット アーキテクチャに適用され、実際のサイズは環境によって若干異なる場合があります。プラットフォーム。

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

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