Profiling and analysing space usage

Simon Marlow simonmar at microsoft.com
Mon Sep 12 06:54:59 EDT 2005


On 02 September 2005 17:09, Bulat Ziganshin wrote:

> Hello Alistair,
> 
> Thursday, September 01, 2005, 6:36:09 PM, you wrote:
> 
>> The heap profile graph for this program shows an initial peak, and
>> then the graph is flat at 8Mbytes, which I think is the space
>> allocated to the two STArrays (2 arrays, 1 million chars each, 4
>> bytes per char?). So it looks as though any allocation for the loop
>> function is GC'd very soon after it's allocated.
> 
> Char uses 4 bytes because it must hold any Unicode character, which is
> about 1 million :)  use Word8 or CChar


STArray is a lazy array, which means that each element of the array is a
pointer to another closure.  However, the reason you only see 4 bytes
per character is because GHC has a static table for Char values < 256,
so all the characters end up being shared, and you're left with 4 bytes
per char for the pointers, at least when all the array elements are
evaluated.

Interestingly, a fully evaluated STArray Char takes the same amount of
dynamic space as an STUArray Char.  It is slower to access, though.

Cheers,
	Simon


More information about the Glasgow-haskell-users mailing list