Haskell 如何防止GHC7编译程序占用所有内存?

Haskell 如何防止GHC7编译程序占用所有内存?,haskell,memory-leaks,ghc,Haskell,Memory Leaks,Ghc,在Haskell中使用各种算法时,我经常会创建一个内存泄漏的程序,就像惰性计算一样。这个程序占用了所有的内存并不是很有趣,如果我意识到太晚了,我通常很难杀死它 使用GHC6时,我的.bashrc中只有导出GHCRTS='-M384m'。但在GHC7中,他们添加了一个警告,除非程序是用-rtsopts编译的,否则在命令行参数或GHCRTS中给它任何RTS选项都会失败。不幸的是,几乎没有Haskell程序是用这个标志编译的,所以设置这个变量会导致一切失败(正如我在中发现的) 您知道如何在GHC7中使

在Haskell中使用各种算法时,我经常会创建一个内存泄漏的程序,就像惰性计算一样。这个程序占用了所有的内存并不是很有趣,如果我意识到太晚了,我通常很难杀死它

使用GHC6时,我的
.bashrc
中只有
导出GHCRTS='-M384m'
。但在GHC7中,他们添加了一个警告,除非程序是用
-rtsopts
编译的,否则在命令行参数或
GHCRTS
中给它任何RTS选项都会失败。不幸的是,几乎没有Haskell程序是用这个标志编译的,所以设置这个变量会导致一切失败(正如我在中发现的)


您知道如何在GHC7中使用
GHCRTS
,或者以另一种方便的方式防止我的程序占用所有内存吗?

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

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

当然也有独立于Haskell的解决方案,只是限制了特定进程的内存使用。这是Linux吗但是为什么你不直接使用
-rtsopts
来处理一个你知道是内存关键的程序呢?@左撇子他说的是,他喜欢在默认情况下为自己的程序打开
-M384M
选项,使用
GHCRTS
环境变量,但现在他不能这样做,因为其他Haskell工具(例如,也许,
cabal dev
)当给定
RTS
参数时,将失败。在Linux上,您可以使用
ulimit-m
来限制从shell启动的进程可以占用的内存量。其他*nixe可能在它们接受的
ulimit
开关上有一些变化。@ninjalj:当然
-m
会起作用吗?我总是使用
-v
。但我不知道我理解*nix俚语或它是什么,“最大驻留集大小”。。。