ホームページ > バックエンド開発 > Golang > 新しく作成された Go マップはどれくらいのメモリを消費しますか?

新しく作成された Go マップはどれくらいのメモリを消費しますか?

Linda Hamilton
リリース: 2024-12-06 04:36:19
オリジナル
679 人が閲覧しました

How Much Memory Does a Newly Created Go Map Consume?

Go マップ用に予約されているメモリの見積もり

Go マップを使用する場合、消費するメモリの見積もりがあると役立つことがよくあります。ドキュメントには、初期メモリ割り当ては実装に依存すると記載されていますが、これを判断する方法について詳しく説明します。

マップ ソース コードの検査

Go マップは 2 つのタイプに基づいて構築されています。 hmap (ヘッダー) と bmap (バケット配列)。ソース コードを調べると、初期スペースが指定されていない場合 (foo := make(map[string]int))、マップ内にバケットが 1 つだけ作成されることがわかります。

マップ ヘッダーの詳細

マップヘッダー自体にはいくつかのフィールドが含まれています:

  1. int (bmap のサイズarray)
  2. uint8 (バケット数)
  3. uint16 (オーバーフローバケット数)
  4. uint32 (マップを拡大する前の最小しきい値)
  5. 2 つの安全でないポインター (要素とポインタキーの場合)
  6. uintptr (未使用) field)

64 ビット アーキテクチャを想定すると、int、uintptr、および unsafe.Pointer のサイズはそれぞれ 8 バイトです。これにより、ヘッダー サイズは次のようになります。

1 * 8 + 1 * 1 + 1 * 2 + 1 * 4 + 2 * 8 + 1 * 8 = 40 bytes
ログイン後にコピー

バケット構造

マップ内の各バケットは、8 つの uint8 値の配列であり、さらに 8 バイトが追加されます:

8 * 1 = 8 bytes
ログイン後にコピー

合計メモリ消費量

ヘッダーとバケットのサイズを合計すると、合計が得られます。メモリ消費量:

40 + 8 = 48 bytes (64-bit architecture)
ログイン後にコピー

この推定値は、初期スペースを指定せずに新しく作成された Go マップのメモリ使用量を概算するために使用できます。

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

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