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バイトなので、必要最低限。