【发布时间】:2014-07-19 09:47:07
【问题描述】:
正如Why does (sum $ takeWhile (<10000000) [1..]) use so much memory? 中提到的,以下确实不会炸毁 ghci 中的内存:
foldl' (+) 0 $ takeWhile (< 10000000) [1 .. ]
但是,如果我创建一个包含以下内容的文件:
import Data.List
longList::[Int]
longList = [1 .. ]
result :: Int
result = foldl' (+) 0 $ takeWhile (< 10000000) longList
main = do
print $ result
并加载到 ghci,然后在运行程序时内存消耗会爆炸。为什么会这样,我能做些什么来修复程序?我正在使用 ghc 7.8.3。
[编辑]
如果我首先通过ghc Test.hs 编译,它确实不似乎会爆炸。但是如果我删除所有.hi 和.o 文件,并通过ghci Test.hs 加载到ghci 中,那么内存确实会爆炸。
【问题讨论】:
-
我在 ghci 和编译和运行时都没有遇到这个程序的内存爆炸。我正在使用
7.6.3。它是编译器错误吗?此外,您可能希望使用ghci -fobject-code启动您的ghci,如here 所述。 -
@Sibi 我可以在
7.6.3中复制此内容。如果您删除所有.hi和.o文件,然后通过ghci Test.hs加载到ghci 中,程序是否会为您炸毁?谢谢 -
@Sibi,奇怪的是,如果我先通过
ghc Test.hs编译然后加载到 ghci 中它不会崩溃 -
如果我删除它们并使用
ghci再次测试它,我会看到一些内存爆炸。我想最好不要在ghci中测试这些条件。 -
我回滚到以前的版本。我们不会在 Stack Overflow 上的问题中提供答案,因为与许多论坛不同,您不必涉足“我也是”和“有没有人解决这个问题”之类的问题来找到有效的答案。对提问者最有效的答案被绿色勾拉到顶部。
标签: haskell memory-leaks ghci