On 26/07/2011 22:41, Albert Y. C. Lai wrote:
On 11-07-26 03:57 PM, Roman Cheplyaka wrote:
The code
main = print $ foldl (+) 0 [1..100]
when compiled (without optimizations) results in a stack overflow, which
is expected.
However, when run from ghci it succeeds. Why is it so?
(Tested with GHC 6.12.something and 7.0.4)
To enjoy unlimited stack in compiled code, add +RTS -K10
To enjoy limited stack in ghci, add +RTS -K8M
To know why, see my
http://www.mail-archive.com/haskell-cafe@haskell.org/msg88368.html
The message linked here doesn't really explain *why*, rather it seems to
be a bug report on haskell-cafe (which I don't usually read, so it
doesn't get fixed!).
GHC itself, and hence also GHCi, have a default maximum stack size of
512M, whereas the default for compiled programs is 8M. I think this is
probably way too low, but the reason there is a maximum at all is
because it is very easy to accidentally write a program with an infinite
loop and some OSs cope rather badly when a program eats all the memory.
I have no idea what was going on with the magic -K10 option, but it
seems to be fixed in 7.2.1:
$ ghc +RTS -K1
ghc-stage2: error in RTS option -K1: size outside allowed range (8 -
18446744073709551615)
$ ghc +RTS -K8
stack overflow: use +RTS -Ksize to increase it
$ ghc +RTS -K60
stack overflow: use +RTS -Ksize to increase it
$ ghc +RTS -K80
stack overflow: use +RTS -Ksize to increase it
Cheers,
Simon
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users