如何保护GHC7编译的程序占用所有内存?

时间:2012-09-07 18:22:10

标签: haskell memory-leaks ghc

当在Haskell中使用各种算法时,我经常遇到我创建一个内存泄漏的程序,因为它经常发生在懒惰的评估中。占用所有记忆的程序并不是很有趣,如果我意识到太晚,我常常很难杀死它。

使用GHC6时,我的export GHCRTS='-M384m'只有.bashrc。但是在GHC7中,他们添加了一个security measure,除非程序是用-rtsopts编译的,否则当它在命令行参数或GHCRTS中被赋予任何RTS选项时,它就会失败。不幸的是,几乎没有用这个标志编译Haskell程序,所以设置这个变量会使一切都失败(正如我在After upgrading to GHC7, all programs suddenly fail saying "Most RTS options are disabled. Link with -rtsopts to enable them."中发现的那样)。

如何使用GHC7使用GHCRTS的任何想法,或者其他方便的方法如何防止我的程序占用所有内存?

1 个答案:

答案 0 :(得分:5)

您可以使用-with-rtsopts=-M384m编译自己的程序,以便在编译时设置RTS选项(一劳永逸)。您还可以在GHCRTS中设置不应与.bashrc一起运行的程序“黑名单”;或许类似

for i in foo bar baz
do
    alias $i="GHCRTS= $i"
done