Go マップを使用する場合、消費するメモリの見積もりがあると役立つことがよくあります。ドキュメントには、初期メモリ割り当ては実装に依存すると記載されていますが、これを判断する方法について詳しく説明します。
Go マップは 2 つのタイプに基づいて構築されています。 hmap (ヘッダー) と bmap (バケット配列)。ソース コードを調べると、初期スペースが指定されていない場合 (foo := make(map[string]int))、マップ内にバケットが 1 つだけ作成されることがわかります。
マップヘッダー自体にはいくつかのフィールドが含まれています:
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 サイトの他の関連記事を参照してください。