Why no stack overflow in ghci?

Simon Marlow marlowsd at gmail.com
Mon Aug 1 16:12:47 CEST 2011


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



More information about the Glasgow-haskell-users mailing list