Go でのマップのメモリ フットプリントの計算
Go でマップのメモリ フットプリントを決定することは、課題となる可能性があります。エンコーディング/バイナリ パッケージの Size 関数は、スライスや固定値の長さを計算するのに便利ですが、マップには拡張されません。
この問題に対処するには、Go マップの内部構造を詳しく調べることができます。マップ ヘッダー (hmap) には、ライブ セルの数やバケット数の 2 を底とする対数などの情報が含まれています。
各バケット (bmap) には、一定数の上位ハッシュ値が保持され、その後にキーと価値観。この構成により、特定のキーと値の組み合わせに必要なパディングが不要になります。
マップのメモリ フットプリントの計算には、ヘッダーのサイズ、バケットのサイズ、およびに格納されているキーと値のサイズの合計が含まれます。地図:
memory_footprint = unsafe.Sizeof(hmap) + (len(theMap) * 8) + (len(theMap) * 8 * unsafe.Sizeof(x)) + (len(theMap) * 8 * unsafe.Sizeof(y))
どこ:
hmap 構造をパッケージと共有するには、 Go ランタイムで使用される thunk.s アプローチと同様の、アセンブリ コードの使用。
以上がGo マップのメモリ フットプリントを正確に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。