6

基本问题伴随着来自 GHCI 解释器的引用。是的,我知道代码的假定用途是将其编译为可执行文件,但是,由于我是 Haskell 的初学者,GHCI 似乎非常适合学习一些 Haskell。

当我使用重计算负载算法时,有时会遇到如下消息:

Prelude Data.List> foldl' (+) 0 [1..2*10^8]
20000000100000000
it :: (Num b, Enum b) => b
(8.35 secs, 17,600,063,056 bytes)

同时,我只安装了 8 GB 的 RAM。

如果内存使用量超过某个限制(我不太确定有多少,但建议这是所有可以使用的内存),则会引发 Stack Overflow 异常,如下图所示:

Prelude> foldl (+) 0 [1..5 * 10^7]
*** Exception: stack overflow

但是,当我的 RAM 总计为 8 GB 并且没有引发 Stack Overflow 异常时,程序怎么可能使用 > 16 GB 的内存?

4

1 回答 1

7

垃圾收集的魔力::set +s您显示的报告的数字告诉分配器请求的字节总数,即使它们后来被释放并返回到分配器以在计算完成之前重用。

于 2019-03-07T12:43:12.627 回答