メモリ食い

リストはHaskellのデータの中でもっとも基本的なものだが、
とてもたくさんメモリを食うようである。
20MBのファイルをstrictに読み込んだら256MBのヒープ制限を越えてしまった。
それで、2MBのファイルを読み込んだらメモリ使用量が50MBと出た。


…1バイトあたり20バイトほどですか。
他の部分で10MBぐらい食ってるはずなのでそんなもんだと思う。


Boxedなデータの単方向リストはどれぐらいメモリを使うのだろうか。
まず、リストのセルにdataへのポインタとnextへのポインタが絶対必要。
ポイントされてるデータがいくらほどメモリを食ってるのかはわからないが、
data本体が4バイト(Char型でも…)使うと仮定すると
残りは20-12=8バイトほどなわけで、
遅延する式を保持しておくにはこれぐらい要るんでないかな〜
とも思う。


今日の結論。
Haskellのリストは1要素あたり本体データ+16バイト(ぐらい)。
大きなデータをstrictに扱いたいときはIOUArrayあたりを使わざるを得ないか?
使いたくないけど。