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

Nic*_*k M 6 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)
Run Code Online (Sandbox Code Playgroud)

同时,我仅实际安装了8 GB RAM。

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

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

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

Dan*_*ner 7

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