GHCI如何显示比我实际拥有的价值更大的已用内存?

时间:2019-03-07 12:19:56

标签: haskell ghci winghci

基本问题与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。

如果内存使用量超过某个限制(我不确定那是多少,但是建议使用所有可用内存),则会引发堆栈溢出异常,如下图所示:

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

但是,当我的RAM总计为8 GB时,该程序如何使用大于16 GB的内存,而又不会引发堆栈溢出异常?

1 个答案:

答案 0 :(得分:7)

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