(which vary, depending on how you compiled).</para>
<para>NOTE: since GHC is itself compiled by GHC, you can change RTS
- options in the compiler using the normal
- <literal>+RTS ... -RTS</literal>
+ options in the compiler using the normal
+ <literal>+RTS ... -RTS</literal>
combination. eg. to increase the maximum heap
- size for a compilation to 128M, you would add
+ size for a compilation to 128M, you would add
<literal>+RTS -M128m -RTS</literal>
to the command line.</para>
<variablelist>
<varlistentry>
- <term><option>-A</option><replaceable>size</replaceable></Term>
+ <term><option>-A</option><replaceable>size</replaceable></term>
<indexterm><primary><option>-A</option></primary><secondary>RTS option</secondary></indexterm>
<indexterm><primary>allocation area, size</primary></indexterm>
<listitem>
used by the garbage collector. The allocation area
(actually generation 0 step 0) is fixed and is never resized
(unless you use <option>-H</option>, below).</para>
-
+
<para>Increasing the allocation area size may or may not
give better performance (a bigger allocation area means
worse cache behaviour but fewer garbage collections and less
</varlistentry>
<varlistentry>
- <term><option>-F</option><replaceable>factor</replaceable></Term>
+ <term><option>-F</option><replaceable>factor</replaceable></term>
<listitem>
<indexterm><primary><option>-F</option></primary><secondary>RTS option</secondary></indexterm>
<indexterm><primary>heap size, factor</primary></indexterm>
</varlistentry>
<varlistentry>
- <term><option>-G</option><replaceable>generations</replaceable></Term>
+ <term><option>-G</option><replaceable>generations</replaceable></term>
<indexterm><primary><option>-G</option></primary><secondary>RTS option</secondary></indexterm>
<indexterm><primary>generations, number
of</primary></indexterm>
<para>Specifying 1 generation with <option>+RTS -G1</option>
gives you a simple 2-space collector, as you would expect.
In a 2-space collector, the <option>-A</option> option (see
- above) specifies the <Emphasis>minimum</Emphasis> allocation
+ above) specifies the <emphasis>minimum</emphasis> allocation
area size, since the allocation area will grow with the
amount of live data in the heap. In a multi-generational
collector the allocation area is a fixed size (unless you
use the <option>-H</option> option, see below).</para>
</listitem>
</varlistentry>
-
- <VarListEntry>
+
+ <varlistentry>
<term><option>-H</option><replaceable>size</replaceable></term>
<indexterm><primary><option>-H</option></primary><secondary>RTS option</secondary></indexterm>
<indexterm><primary>heap size, suggested</primary></indexterm>
<option>-A</option><replaceable>size</replaceable>.</para>
</listitem>
</varlistentry>
-
+
<varlistentry>
<term><option>-k</option><replaceable>size</replaceable></term>
<indexterm><primary><option>-k</option></primary><secondary>RTS option</secondary></indexterm>
<indexterm><primary><option>-K</option></primary><secondary>RTS option</secondary></indexterm>
<indexterm><primary>stack, maximum size</primary></indexterm>
<listitem>
- <para>[Default: 1M] Set the maximum stack size for
+ <para>[Default: 8M] Set the maximum stack size for
an individual thread to <replaceable>size</replaceable>
bytes. This option is there purely to stop the program
eating up all the available memory in the machine if it gets
<varlistentry>
<term><option>-s</option><replaceable>file</replaceable></term>
- <term><option>-S</option><replaceable>file</replaceable></Term>
+ <term><option>-S</option><replaceable>file</replaceable></term>
<indexterm><primary><option>-S</option></primary><secondary>RTS option</secondary></indexterm>
<indexterm><primary><option>-s</option></primary><secondary>RTS option</secondary></indexterm>
<listitem>
(<option>-S</option>) garbage-collector statistics into file
<replaceable>file</replaceable>. The default
<replaceable>file</replaceable> is
- <Filename><replaceable>program</replaceable>.stat</Filename>. The
+ <filename><replaceable>program</replaceable>.stat</filename>. The
<replaceable>file</replaceable> <constant>stderr</constant>
is treated specially, with the output really being sent to
<constant>stderr</constant>.</para>
</sect2>
-<!-- ---------------------------------------------------------------------- -->
<sect2>
<title>RTS options for profiling and Concurrent/Parallel Haskell</title>
- <para>The RTS options related to profiling are described in <XRef
- LinkEnd="prof-rts-options">; and those for concurrent/parallel
- stuff, in <XRef LinkEnd="parallel-rts-opts">.</para>
+ <para>The RTS options related to profiling are described in <xref
+ linkend="rts-options-heap-prof"/>; and those for concurrent/parallel
+ stuff, in <xref linkend="parallel-rts-opts"/>.</para>
</sect2>
-<!-- ---------------------------------------------------------------------- -->
<sect2 id="rts-options-debugging">
<title>RTS options for hackers, debuggers, and over-interested
souls</title>
be really useful, linked with suitable system libraries.
Not a trivial undertaking: consult the installation guide on
how to set things up for easy “ticky-ticky”
- profiling. For more information, see <XRef
- LinkEnd="ticky-ticky">.</para>
+ profiling. For more information, see <xref
+ linkend="ticky-ticky"/>.</para>
</listitem>
</varlistentry>
</screen>
<para>each <literal>cc</literal><subscript>i</subscript> is
a cost centre in the program (see <xref
- linkend="cost-centres">), and the sequence represents the
+ linkend="cost-centres"/>), and the sequence represents the
“call stack” at the point the exception was
raised. The leftmost item is the innermost function in the
call stack, and the rightmost item is the outermost
</listitem>
</varlistentry>
</variablelist>
-
+
</sect2>
-
+
<sect2 id="rts-hooks">
<title>“Hooks” to change RTS behaviour</title>
<variablelist>
<varlistentry>
- <term><Function>void ErrorHdrHook (FILE *)</function></term>
- <indexterm><primary><function>ErrorHdrHook</function></primary></indexterm>
- <listitem>
- <para>What's printed out before the message from
- <function>error</function>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
<term><function>void OutOfHeapHook (unsigned long, unsigned long)</function></term>
<indexterm><primary><function>OutOfHeapHook</function></primary></indexterm>
- <ListItem>
+ <listitem>
<para>The heap-overflow message.</para>
</listitem>
</varlistentry>
<term><function>void MallocFailHook (long int)</function></term>
<indexterm><primary><function>MallocFailHook</function></primary></indexterm>
<listitem>
- <para>The message printed if <Function>malloc</Function>
+ <para>The message printed if <function>malloc</function>
fails.</para>
</listitem>
</varlistentry>
-
- <varlistentry>
- <term><function>void PatErrorHdrHook (FILE *)</function></term>
- <indexterm><primary><function>PatErrorHdrHook</function></primary></indexterm>
- <listitem>
- <para>The message printed if a pattern-match fails (the
- failures that were not handled by the Haskell
- programmer).</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><function>void PreTraceHook (FILE *)</function></term>
- <indexterm><primary><function>PreTraceHook</function></primary></indexterm>
- <listitem>
- <para>What's printed out before a <Function>trace</Function>
- message.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><function>void PostTraceHook (FILE *)</function></term>
- <indexterm><primary><function>PostTraceHook</function></primary></indexterm>
- <listitem>
- <para>What's printed out after a <Function>trace</Function>
- message.</para>
- </listitem>
- </varlistentry>
</variablelist>
<para>For examples of the use of these hooks, see GHC's own