有没有办法限制GHCi可以拥有的内存?

问题描述 投票:0回答:2

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

ghci> let f@(_:x) = 0:1:zipWith(+)f x
ghci> length f

然后,一段时间内没有任何反应,如果我反应不够快,GHCi 可能会消耗 2 GB RAM,导致我的系统冻结。如果为时已晚,解决此问题的唯一方法是[ALT] + [PRINT] + [K]。

我的问题:有没有一种简单的方法可以将 GHCi 消耗的内存限制为 1 GB?如果超出限制,则应中止计算或终止 GHCi。

debugging haskell memory-management ghc ghci
2个回答
19
投票

实现此目的的一种独立于平台的方法是向 Haskell 运行时提供

-M
选项作为选项,如下所示

ghci +RTS -M1m

有关详细信息,请参阅 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.

2
投票

在设置了

ulimit -m
的 shell 下运行它是一种相当简单的方法。如果您想定期运行一些限制,您可以创建一个包装脚本,在运行
ulimit
之前执行
ghci
操作。

© www.soinside.com 2019 - 2024. All rights reserved.