モチベーション
Haskell(GHC)プログラムで誤った再帰関数を書いて無限ループさせると多くの場合、サンクも無限に発生する。サンクはヒープに積まれ、そしてデフォルトでヒープのサイズ上限はない(ghc 7.10.3時点)ので、あっと言う間にシステムのメモリを食いつぶししてしまい、非常に危険である。
ヒープメモリサイズに上限を設けるには
RTSオプションを使う。
$ ghc -rtsopts Main.hs
$ ./Main +RTS -M64m
あるいは環境変数GHCRTS
も食ってくれる。
$ GHCRTS="-M64m" ./Main
注意点:
-
-rtsopts
をつけてリンクしておかないと実行時にRTSオプションを食ってくれない。リンク時にRTSオプションを設定しておくには$ ghc -with-rtsopts="-M64m" Main.hs
とする。
-
runghc
では環境変数GHCRTS
を使う方法のみが有効らしい http://stackoverflow.com/questions/29339643/how-can-i-pass-rts-options-to-runghc