[Haskell-cafe] ghc +RTS -M and -A behaving strange

Daniel Fischer daniel.is.fischer at googlemail.com
Wed Dec 29 20:39:28 CET 2010

On Wednesday 29 December 2010 15:41:22, Johannes Waldmann wrote:
> > ghci> (8000*2^20) `mod` (2^32)
> > 4093640704
> >
> > Seems GHC uses Word for the allocation figures

Looking at the rts-code, maxHeapSize is in blocks (4096 bytes, as far as I 
can see) and the code for setting it uses double and StgWord64.
Though the type of maxHeapSize is nat (unsigned int, which may be 32 bits 
even on 64-bit systems?), 8G are 2097152 blocks, so the number is well 
within range and no overflow should occur.

But the `heap exhausted' message gives the heap size in bytes, with 
argument type lnat (unsigned long).

So if sizeof(unsigned long) is 4 on your system, the heap exhausted message 
would print 0 bytes resp 4093640704 bytes even if the heap size is 
correctly set to 8G resp 8000M.

Can you watch the allocation with top to see whether the programme consumes 
the 8G and just the reported figures are wrong?

In any case, some bug report is in order, it only remains to find out 
whether just the reporting is off or also the allocation code.

> Interesting. Then how can I set the memory bounds that I want?

Should work, as far as I can tell.

> The machine has 12 GB, and if I leave out any RTS options,
> then the ghc-compiled program will happily consume it all.

More information about the Haskell-Cafe mailing list