怎么可能GHCI显示器使用的内存比我实际拥有的更大?

问题描述 投票:6回答:1

基本问题伴随着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的内存?

haskell ghci winghci
1个回答
7
投票

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

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