monthly gimite

試験運用中。

RubyのArray/Hashの消費メモリ (2)

昨日のコメント欄でLPenguin氏も言ってますが、Hashの代わりにArrayを使うなら、ラッパをかぶせてHashもどきにするのが自然です。ただ1個気になって追加実験してみると、

  • Object: 1個50バイト

…ということで、1個のArrayに1個のラッパオブジェクトをつけると、100バイトぐらいになっちゃうんですよね。

class MiniMap < Array
  #Hashもどきインタフェース...
end

とかやれば回避できそうですけど。なんか継承関係になるの、気持ち悪いなぁ。しゃあないかなぁ。

ま、メモリ消費が激しいとか言い始めた時点で、Rubyを捨ててC++かなにかで書くのが正しい気も…。C++でもmapとか多用すると同じ問題がおきそうですけど、C++ならメモリ消費も所要時間も増やさずにラッパ追加したりできますしねぇ。

ああ、あと10万要素とかになったら、メモリじゃなくて(GDBMとか使って)ハードディスクに置くべき、って話もあるかも…。