monthly gimite

試験運用中。

RubyのArray/Hashの消費メモリ

手元のCygwin Ruby 1.8.3で[1, 2]と{1=>2}をそれぞれ10万要素ほど生成して調べたところ、だいだい

  • [1, 2]: 1個60バイト
  • {1=>2}: 1個140バイト

ぐらい消費してるっぽいです。結構食いますね。

ちなみにArrayの方は、要素数を1増やすごとに4バイト増えます*1。Hashの方は未調査。

自作のRubyプログラムのメモリ消費が激しくて困ることが時々あるんですが、小さいArrayとかHashを使いまくってるのが原因かも。

上の結果からすると、メモリをケチるためには

  • 素数が少ないならHashの代わりにArrayを。(例: {1=>2, 3=>4}→[1, 2, 3, 4])
  • Arrayもできるだけ入れ子にしないで、フラットに。(例: [ [1, 2], [3, 4] ]→[1, 2, 3, 4])

ってところでしょうか。

*1:ポインタ1個が4バイトなので、必要最低限。