Memory Usage
Hash
サイズごとのメモリー使用量 (mrb_malloc
や mrb_realloc
に実際に指定した値) の計測結果です (struct RVALUE
のサイズは含みません)。
64-bit Word-boxing
64-bit NaN-boxing
64-bit No-boxing
32-bit Word-boxing
32-bit No-boxing
Hash Size: --
Baseline:
--
kB
New:
--
kB
Factor:
--
times
Entry List Expansion
Hash Buckets Expansion
Drag and drop to zoom in (double-click resets)
ハッシュバケット拡大時のメモリー使用量の増加量が、New 実装は Baseline 実装と比較してかなり少なくハッシュバケットが小さいことが良く分かります。
boxing とハッシュテーブルの有無による関係は概ね以下のようになっています。
boxing | ハッシュテーブル | メモリー使用量 |
---|---|---|
あり | なし | 0.55倍-0.75倍 |
あり | あり | 0.50倍-0.75倍 |
なし | なし | 0.70倍-0.95倍 |
なし | あり | 0.70倍-0.95倍 |
boxing ありのほうが削減率が大きくなっています。これは、今回削減対象となっているハッシュバケットや管理情報のメモリー使用量が、Hash
オブジェクト全体のメモリー使用量に対して割合が大きいためです。
なお、空のハッシュは mrb_hash_new
で作成しているため、両実装とも初期メモリー使用量が0になっていますが、Baseline 実装では Hash.new
や空のハッシュリテラルで作成した場合は0になりません。