初期メモリ割り当てを指定せずに Go マップを作成する場合、実際のメモリ使用量は謎のままです。この記事では、実装によって割り当てられるメモリを決定する方法について説明します。
Go マップ タイプのソース コードを詳しく調べると、マップが次の要素で構成されていることがわかります。 2 つのコンポーネント: ヘッダー (hmap) とバケットの配列 (bmap)。注目すべきことに、マップの作成時に初期割り当てが指定されていない場合、単一のバケットが割り当てられます。
ヘッダーは 7 つのフィールドで構成されます:
64 ビット マシンでは、int のサイズ、 uintptr、および unsafe.Pointer はそれぞれ 8 バイトで、合計 40 バイトになります。ヘッダー用。
バケットは、uint8 型の 8 つの要素を含む配列であり、追加の 8 バイトになります。
したがって、1 つのバケットを持つマップに割り当てられるメモリは次のようになります。の:
この計算は64 ビット アーキテクチャに適用され、実際のサイズは環境によって若干異なる場合があります。プラットフォーム。
以上が指定されていない Go マップはどれくらいのメモリを割り当てますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。