基本问题伴随着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的内存?
垃圾收集的魔力:你展示的:set +s
报告的数字告诉我们从分配器请求的总字节数,即使它们后来被解除分配并返回到分配器以便在计算完成之前重用。