有没有办法限制内存,ghci可以有?

fuz*_*fuz 13 debugging haskell memory-management ghc ghci

我习惯使用ghci来调试我的代码.通常,会发生类似这样的事情(当然不是那么明显):

ghci> let f@(_:x) = 0:1:zipWith(+)f x
ghci> length f
Run Code Online (Sandbox Code Playgroud)

然后,一段时间没有任何事情发生,如果我没有足够快的反应,ghci已经吃掉了2 GB的RAM,导致我的系统冻结.如果为时已晚,解决此问题的唯一方法是[ALT] + [打印] + [K].

我的问题:是否有一种简单的方法可以限制内存,ghci可以使用,比方说1 GB?如果超出限制,计算应该中止或ghci应该被杀死.

Bas*_*ink 19

完成此任务的平台独立方法是将-M选项作为on选项提供给Haskell运行时,如下所示

ghci +RTS -M1m
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅GHC文档的页面,了解如何控制RTS(运行时系统).

ghci输出现在看起来像:

>ghci +RTS -M10m
GHCi, version 6.12.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Prelude> let f@(_:x) = 0:1:zipWith(+)f x
Prelude> length f
Heap exhausted;
Current maximum heap size is 10485760 bytes (10 MB);
use `+RTS -M<size>' to increase it.
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚在`〜/ .bashrc`中创建了别名`alias ghci ='ghci + RTS -M500m -RTS'`,现在一切都很好.非常感谢你. (3认同)