当在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
的任何想法,或者其他方便的方法如何防止我的程序占用所有内存?
答案 0 :(得分:5)
您可以使用-with-rtsopts=-M384m
编译自己的程序,以便在编译时设置RTS选项(一劳永逸)。您还可以在GHCRTS
中设置不应与.bashrc
一起运行的程序“黑名单”;或许类似
for i in foo bar baz
do
alias $i="GHCRTS= $i"
done