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..1000000]

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 -K<size> to increase it
$ ghc +RTS -K60
stack overflow: use +RTS -K<size> to increase it
$ ghc +RTS -K80
stack overflow: use +RTS -K<size> to increase it

Cheers,
        Simon

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to