+ <listitem>
+ <para>Garbage collection requires more memory than the actual
+ residency. The factor depends on the kind of garbage collection
+ algorithm in use: a major GC in the standard
+ generation copying collector will usually require 3L bytes of
+ memory, where L is the amount of live data. This is because by
+ default (see the <option>+RTS -F</option> option) we allow the old
+ generation to grow to twice its size (2L) before collecting it, and
+ we require additionally L bytes to copy the live data into. When
+ using compacting collection (see the <option>+RTS -c</option>
+ option), this is reduced to 2L, and can further be reduced by
+ tweaking the <option>-F</option> option. Also add the size of the
+ allocation area (currently a fixed 512Kb).</para>
+ </listitem>
+
+ <listitem>
+ <para>The stack isn't counted in the heap profile by default. See the
+ <option>+RTS -xt</option> option.</para>
+ </listitem>
+
+ <listitem>
+ <para>The program text itself, the C stack, any non-heap data (eg. data
+ allocated by foreign libraries, and data allocated by the RTS), and
+ <literal>mmap()</literal>'d memory are not counted in the heap profile.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>