Go マップのメモリ割り当て: 実装固有の調査
Go マッピングの世界では、メモリ割り当てには謎が存在します。マップの初期化時に初期容量パラメータが存在しないため、割り当てられるスペースのサイズは実装の気まぐれに左右されます。しかし、この隠された割り当ての秘密を明らかにするにはどうすればよいでしょうか?
Go マップのソース コードを深く掘り下げると、ヘッダーとバケットの配列で構成される構造が明らかになります。初期スペースが指定されていない場合、マップは 1 つのバケットのみで構成されます。
ヘッダー自体はまさに迷路のようなフィールドです:
64 ビット マシンでは、int、uintptr、および unsafe.Pointer のサイズはワード サイズと一致します。 (8バイト)。この構成により、ヘッダーとして合計 40 バイトが生成されます。
次に、8 つの uint8 要素の配列を格納するバケットに注目してみましょう。これにより、全体の合計に 8 バイトが追加されます。
これらのコンポーネントを組み合わせると、合計 48 バイトになります (64 ビット アーキテクチャの場合)。この知識があれば、Go のマップ メモリ割り当てを取り巻く不確実性のベールを自信を持って打ち破ることができます。
以上が最初は空の Go マップにはどれくらいのメモリが割り当てられますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。