Ben Challenor wrote:
Hi
I'm learning Haskell through writing a compiler. I'm seeing huge
memory use in a function which converts the dataflow graph to the form
required by Data.Graph. [...]
I assume the allocation is being garbage-collected pretty quickly,
because a) 6,616,297,296 bytes is stupid (!) and b) Process Explorer
informs me that the peak private bytes of the program is not more than
a couple of MB.
Thats not a space leak. A space leak is when you find that all 6 GB of
that allocation is being retained. You are correct that the GC is
recovering this space as fast as it gets allocated.
The profiler records how much memory is allocated from within various
bits of your program to help you understand its performance and where
optimisable hotspots are. I haven't looked at your code, but I imagine
that you are traversing lazy data structures, which means that bits of
the structure are consumed and deallocated as fast as they are created.
The profiler also has options to help you understand what is being
retained where.
I'd advise against trying to make your program stricter because you
might suddenly find yourself building an entire 6GB structure in memory
before traversing it, which would not be a Good Thing.
Paul.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe