<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type="text/xsl"
        href="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
        "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
]>

<refentry>
  <refentryinfo>
    <title>User Manual</title>
    <productname>jemalloc</productname>
    <releaseinfo role="version">@jemalloc_version@</releaseinfo>
    <authorgroup>
      <author>
        <firstname>Jason</firstname>
        <surname>Evans</surname>
        <personblurb>Author</personblurb>
      </author>
    </authorgroup>
  </refentryinfo>
  <refmeta>
    <refentrytitle>JEMALLOC</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>
  <refnamediv>
    <refdescriptor>jemalloc</refdescriptor>
    <refname>jemalloc</refname>
    <!-- Each refname causes a man page file to be created.  Only if this were
         the system malloc(3) implementation would these files be appropriate.
    <refname>malloc</refname>
    <refname>calloc</refname>
    <refname>posix_memalign</refname>
    <refname>aligned_alloc</refname>
    <refname>realloc</refname>
    <refname>free</refname>
    <refname>mallocx</refname>
    <refname>rallocx</refname>
    <refname>xallocx</refname>
    <refname>sallocx</refname>
    <refname>dallocx</refname>
    <refname>sdallocx</refname>
    <refname>nallocx</refname>
    <refname>mallctl</refname>
    <refname>mallctlnametomib</refname>
    <refname>mallctlbymib</refname>
    <refname>malloc_stats_print</refname>
    <refname>malloc_usable_size</refname>
    -->
    <refpurpose>general purpose memory allocation functions</refpurpose>
  </refnamediv>
  <refsect1 id="library">
    <title>LIBRARY</title>
    <para>This manual describes jemalloc @jemalloc_version@.  More information
    can be found at the <ulink
    url="http://www.canonware.com/jemalloc/">jemalloc website</ulink>.</para>
  </refsect1>
  <refsynopsisdiv>
    <title>SYNOPSIS</title>
    <funcsynopsis>
      <funcsynopsisinfo>#include &lt;<filename class="headerfile">jemalloc/jemalloc.h</filename>&gt;</funcsynopsisinfo>
      <refsect2>
        <title>Standard API</title>
        <funcprototype>
          <funcdef>void *<function>malloc</function></funcdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>void *<function>calloc</function></funcdef>
          <paramdef>size_t <parameter>number</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>int <function>posix_memalign</function></funcdef>
          <paramdef>void **<parameter>ptr</parameter></paramdef>
          <paramdef>size_t <parameter>alignment</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>void *<function>aligned_alloc</function></funcdef>
          <paramdef>size_t <parameter>alignment</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>void *<function>realloc</function></funcdef>
          <paramdef>void *<parameter>ptr</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>void <function>free</function></funcdef>
          <paramdef>void *<parameter>ptr</parameter></paramdef>
        </funcprototype>
      </refsect2>
      <refsect2>
        <title>Non-standard API</title>
        <funcprototype>
          <funcdef>void *<function>mallocx</function></funcdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
          <paramdef>int <parameter>flags</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>void *<function>rallocx</function></funcdef>
          <paramdef>void *<parameter>ptr</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
          <paramdef>int <parameter>flags</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>size_t <function>xallocx</function></funcdef>
          <paramdef>void *<parameter>ptr</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
          <paramdef>size_t <parameter>extra</parameter></paramdef>
          <paramdef>int <parameter>flags</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>size_t <function>sallocx</function></funcdef>
          <paramdef>void *<parameter>ptr</parameter></paramdef>
          <paramdef>int <parameter>flags</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>void <function>dallocx</function></funcdef>
          <paramdef>void *<parameter>ptr</parameter></paramdef>
          <paramdef>int <parameter>flags</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>void <function>sdallocx</function></funcdef>
          <paramdef>void *<parameter>ptr</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
          <paramdef>int <parameter>flags</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>size_t <function>nallocx</function></funcdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
          <paramdef>int <parameter>flags</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>int <function>mallctl</function></funcdef>
          <paramdef>const char *<parameter>name</parameter></paramdef>
          <paramdef>void *<parameter>oldp</parameter></paramdef>
          <paramdef>size_t *<parameter>oldlenp</parameter></paramdef>
          <paramdef>void *<parameter>newp</parameter></paramdef>
          <paramdef>size_t <parameter>newlen</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>int <function>mallctlnametomib</function></funcdef>
          <paramdef>const char *<parameter>name</parameter></paramdef>
          <paramdef>size_t *<parameter>mibp</parameter></paramdef>
          <paramdef>size_t *<parameter>miblenp</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>int <function>mallctlbymib</function></funcdef>
          <paramdef>const size_t *<parameter>mib</parameter></paramdef>
          <paramdef>size_t <parameter>miblen</parameter></paramdef>
          <paramdef>void *<parameter>oldp</parameter></paramdef>
          <paramdef>size_t *<parameter>oldlenp</parameter></paramdef>
          <paramdef>void *<parameter>newp</parameter></paramdef>
          <paramdef>size_t <parameter>newlen</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>void <function>malloc_stats_print</function></funcdef>
          <paramdef>void <parameter>(*write_cb)</parameter>
            <funcparams>void *, const char *</funcparams>
          </paramdef>
          <paramdef>void *<parameter>cbopaque</parameter></paramdef>
          <paramdef>const char *<parameter>opts</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>size_t <function>malloc_usable_size</function></funcdef>
          <paramdef>const void *<parameter>ptr</parameter></paramdef>
        </funcprototype>
        <funcprototype>
          <funcdef>void <function>(*malloc_message)</function></funcdef>
          <paramdef>void *<parameter>cbopaque</parameter></paramdef>
          <paramdef>const char *<parameter>s</parameter></paramdef>
        </funcprototype>
        <para><type>const char *</type><varname>malloc_conf</varname>;</para>
      </refsect2>
    </funcsynopsis>
  </refsynopsisdiv>
  <refsect1 id="description">
    <title>DESCRIPTION</title>
    <refsect2>
      <title>Standard API</title>

      <para>The <function>malloc<parameter/></function> function allocates
      <parameter>size</parameter> bytes of uninitialized memory.  The allocated
      space is suitably aligned (after possible pointer coercion) for storage
      of any type of object.</para>

      <para>The <function>calloc<parameter/></function> function allocates
      space for <parameter>number</parameter> objects, each
      <parameter>size</parameter> bytes in length.  The result is identical to
      calling <function>malloc<parameter/></function> with an argument of
      <parameter>number</parameter> * <parameter>size</parameter>, with the
      exception that the allocated memory is explicitly initialized to zero
      bytes.</para>

      <para>The <function>posix_memalign<parameter/></function> function
      allocates <parameter>size</parameter> bytes of memory such that the
      allocation's base address is a multiple of
      <parameter>alignment</parameter>, and returns the allocation in the value
      pointed to by <parameter>ptr</parameter>.  The requested
      <parameter>alignment</parameter> must be a power of 2 at least as large as
      <code language="C">sizeof(<type>void *</type>)</code>.</para>

      <para>The <function>aligned_alloc<parameter/></function> function
      allocates <parameter>size</parameter> bytes of memory such that the
      allocation's base address is a multiple of
      <parameter>alignment</parameter>.  The requested
      <parameter>alignment</parameter> must be a power of 2.  Behavior is
      undefined if <parameter>size</parameter> is not an integral multiple of
      <parameter>alignment</parameter>.</para>

      <para>The <function>realloc<parameter/></function> function changes the
      size of the previously allocated memory referenced by
      <parameter>ptr</parameter> to <parameter>size</parameter> bytes.  The
      contents of the memory are unchanged up to the lesser of the new and old
      sizes.  If the new size is larger, the contents of the newly allocated
      portion of the memory are undefined.  Upon success, the memory referenced
      by <parameter>ptr</parameter> is freed and a pointer to the newly
      allocated memory is returned.  Note that
      <function>realloc<parameter/></function> may move the memory allocation,
      resulting in a different return value than <parameter>ptr</parameter>.
      If <parameter>ptr</parameter> is <constant>NULL</constant>, the
      <function>realloc<parameter/></function> function behaves identically to
      <function>malloc<parameter/></function> for the specified size.</para>

      <para>The <function>free<parameter/></function> function causes the
      allocated memory referenced by <parameter>ptr</parameter> to be made
      available for future allocations.  If <parameter>ptr</parameter> is
      <constant>NULL</constant>, no action occurs.</para>
    </refsect2>
    <refsect2>
      <title>Non-standard API</title>
      <para>The <function>mallocx<parameter/></function>,
      <function>rallocx<parameter/></function>,
      <function>xallocx<parameter/></function>,
      <function>sallocx<parameter/></function>,
      <function>dallocx<parameter/></function>,
      <function>sdallocx<parameter/></function>, and
      <function>nallocx<parameter/></function> functions all have a
      <parameter>flags</parameter> argument that can be used to specify
      options.  The functions only check the options that are contextually
      relevant.  Use bitwise or (<code language="C">|</code>) operations to
      specify one or more of the following:
        <variablelist>
          <varlistentry id="MALLOCX_LG_ALIGN">
            <term><constant>MALLOCX_LG_ALIGN(<parameter>la</parameter>)
            </constant></term>

            <listitem><para>Align the memory allocation to start at an address
            that is a multiple of <code language="C">(1 &lt;&lt;
            <parameter>la</parameter>)</code>.  This macro does not validate
            that <parameter>la</parameter> is within the valid
            range.</para></listitem>
          </varlistentry>
          <varlistentry id="MALLOCX_ALIGN">
            <term><constant>MALLOCX_ALIGN(<parameter>a</parameter>)
            </constant></term>

            <listitem><para>Align the memory allocation to start at an address
            that is a multiple of <parameter>a</parameter>, where
            <parameter>a</parameter> is a power of two.  This macro does not
            validate that <parameter>a</parameter> is a power of 2.
            </para></listitem>
          </varlistentry>
          <varlistentry id="MALLOCX_ZERO">
            <term><constant>MALLOCX_ZERO</constant></term>

            <listitem><para>Initialize newly allocated memory to contain zero
            bytes.  In the growing reallocation case, the real size prior to
            reallocation defines the boundary between untouched bytes and those
            that are initialized to contain zero bytes.  If this macro is
            absent, newly allocated memory is uninitialized.</para></listitem>
          </varlistentry>
          <varlistentry id="MALLOCX_TCACHE">
            <term><constant>MALLOCX_TCACHE(<parameter>tc</parameter>)
            </constant></term>

            <listitem><para>Use the thread-specific cache (tcache) specified by
            the identifier <parameter>tc</parameter>, which must have been
            acquired via the <link
            linkend="tcache.create"><mallctl>tcache.create</mallctl></link>
            mallctl.  This macro does not validate that
            <parameter>tc</parameter> specifies a valid
            identifier.</para></listitem>
          </varlistentry>
          <varlistentry id="MALLOC_TCACHE_NONE">
            <term><constant>MALLOCX_TCACHE_NONE</constant></term>

            <listitem><para>Do not use a thread-specific cache (tcache).  Unless
            <constant>MALLOCX_TCACHE(<parameter>tc</parameter>)</constant> or
            <constant>MALLOCX_TCACHE_NONE</constant> is specified, an
            automatically managed tcache will be used under many circumstances.
            This macro cannot be used in the same <parameter>flags</parameter>
            argument as
            <constant>MALLOCX_TCACHE(<parameter>tc</parameter>)</constant>.</para></listitem>
          </varlistentry>
          <varlistentry id="MALLOCX_ARENA">
            <term><constant>MALLOCX_ARENA(<parameter>a</parameter>)
            </constant></term>

            <listitem><para>Use the arena specified by the index
            <parameter>a</parameter>.  This macro has no effect for regions that
            were allocated via an arena other than the one specified.  This
            macro does not validate that <parameter>a</parameter> specifies an
            arena index in the valid range.</para></listitem>
          </varlistentry>
        </variablelist>
      </para>

      <para>The <function>mallocx<parameter/></function> function allocates at
      least <parameter>size</parameter> bytes of memory, and returns a pointer
      to the base address of the allocation.  Behavior is undefined if
      <parameter>size</parameter> is <constant>0</constant>, or if request size
      overflows due to size class and/or alignment constraints.</para>

      <para>The <function>rallocx<parameter/></function> function resizes the
      allocation at <parameter>ptr</parameter> to be at least
      <parameter>size</parameter> bytes, and returns a pointer to the base
      address of the resulting allocation, which may or may not have moved from
      its original location.  Behavior is undefined if
      <parameter>size</parameter> is <constant>0</constant>, or if request size
      overflows due to size class and/or alignment constraints.</para>

      <para>The <function>xallocx<parameter/></function> function resizes the
      allocation at <parameter>ptr</parameter> in place to be at least
      <parameter>size</parameter> bytes, and returns the real size of the
      allocation.  If <parameter>extra</parameter> is non-zero, an attempt is
      made to resize the allocation to be at least <code
      language="C">(<parameter>size</parameter> +
      <parameter>extra</parameter>)</code> bytes, though inability to allocate
      the extra byte(s) will not by itself result in failure to resize.
      Behavior is undefined if <parameter>size</parameter> is
      <constant>0</constant>, or if <code
      language="C">(<parameter>size</parameter> + <parameter>extra</parameter>
      &gt; <constant>SIZE_T_MAX</constant>)</code>.</para>

      <para>The <function>sallocx<parameter/></function> function returns the
      real size of the allocation at <parameter>ptr</parameter>.</para>

      <para>The <function>dallocx<parameter/></function> function causes the
      memory referenced by <parameter>ptr</parameter> to be made available for
      future allocations.</para>

      <para>The <function>sdallocx<parameter/></function> function is an
      extension of <function>dallocx<parameter/></function> with a
      <parameter>size</parameter> parameter to allow the caller to pass in the
      allocation size as an optimization.  The minimum valid input size is the
      original requested size of the allocation, and the maximum valid input
      size is the corresponding value returned by
      <function>nallocx<parameter/></function> or
      <function>sallocx<parameter/></function>.</para>

      <para>The <function>nallocx<parameter/></function> function allocates no
      memory, but it performs the same size computation as the
      <function>mallocx<parameter/></function> function, and returns the real
      size of the allocation that would result from the equivalent
      <function>mallocx<parameter/></function> function call.  Behavior is
      undefined if <parameter>size</parameter> is <constant>0</constant>, or if
      request size overflows due to size class and/or alignment
      constraints.</para>

      <para>The <function>mallctl<parameter/></function> function provides a
      general interface for introspecting the memory allocator, as well as
      setting modifiable parameters and triggering actions.  The
      period-separated <parameter>name</parameter> argument specifies a
      location in a tree-structured namespace; see the <xref
      linkend="mallctl_namespace" xrefstyle="template:%t"/> section for
      documentation on the tree contents.  To read a value, pass a pointer via
      <parameter>oldp</parameter> to adequate space to contain the value, and a
      pointer to its length via <parameter>oldlenp</parameter>; otherwise pass
      <constant>NULL</constant> and <constant>NULL</constant>.  Similarly, to
      write a value, pass a pointer to the value via
      <parameter>newp</parameter>, and its length via
      <parameter>newlen</parameter>; otherwise pass <constant>NULL</constant>
      and <constant>0</constant>.</para>

      <para>The <function>mallctlnametomib<parameter/></function> function
      provides a way to avoid repeated name lookups for applications that
      repeatedly query the same portion of the namespace, by translating a name
      to a &ldquo;Management Information Base&rdquo; (MIB) that can be passed
      repeatedly to <function>mallctlbymib<parameter/></function>.  Upon
      successful return from <function>mallctlnametomib<parameter/></function>,
      <parameter>mibp</parameter> contains an array of
      <parameter>*miblenp</parameter> integers, where
      <parameter>*miblenp</parameter> is the lesser of the number of components
      in <parameter>name</parameter> and the input value of
      <parameter>*miblenp</parameter>.  Thus it is possible to pass a
      <parameter>*miblenp</parameter> that is smaller than the number of
      period-separated name components, which results in a partial MIB that can
      be used as the basis for constructing a complete MIB.  For name
      components that are integers (e.g. the 2 in
      <link
      linkend="arenas.bin.i.size"><mallctl>arenas.bin.2.size</mallctl></link>),
      the corresponding MIB component will always be that integer.  Therefore,
      it is legitimate to construct code like the following: <programlisting
      language="C"><![CDATA[
unsigned nbins, i;
size_t mib[4];
size_t len, miblen;

len = sizeof(nbins);
mallctl("arenas.nbins", &nbins, &len, NULL, 0);

miblen = 4;
mallctlnametomib("arenas.bin.0.size", mib, &miblen);
for (i = 0; i < nbins; i++) {
	size_t bin_size;

	mib[2] = i;
	len = sizeof(bin_size);
	mallctlbymib(mib, miblen, &bin_size, &len, NULL, 0);
	/* Do something with bin_size... */
}]]></programlisting></para>

      <para>The <function>malloc_stats_print<parameter/></function> function
      writes human-readable summary statistics via the
      <parameter>write_cb</parameter> callback function pointer and
      <parameter>cbopaque</parameter> data passed to
      <parameter>write_cb</parameter>, or
      <function>malloc_message<parameter/></function> if
      <parameter>write_cb</parameter> is <constant>NULL</constant>.  This
      function can be called repeatedly.  General information that never
      changes during execution can be omitted by specifying "g" as a character
      within the <parameter>opts</parameter> string.  Note that
      <function>malloc_message<parameter/></function> uses the
      <function>mallctl*<parameter/></function> functions internally, so
      inconsistent statistics can be reported if multiple threads use these
      functions simultaneously.  If <option>--enable-stats</option> is
      specified during configuration, &ldquo;m&rdquo; and &ldquo;a&rdquo; can
      be specified to omit merged arena and per arena statistics, respectively;
      &ldquo;b&rdquo;, &ldquo;l&rdquo;, and &ldquo;h&rdquo; can be specified to
      omit per size class statistics for bins, large objects, and huge objects,
      respectively.  Unrecognized characters are silently ignored.  Note that
      thread caching may prevent some statistics from being completely up to
      date, since extra locking would be required to merge counters that track
      thread cache operations.
      </para>

      <para>The <function>malloc_usable_size<parameter/></function> function
      returns the usable size of the allocation pointed to by
      <parameter>ptr</parameter>.  The return value may be larger than the size
      that was requested during allocation.  The
      <function>malloc_usable_size<parameter/></function> function is not a
      mechanism for in-place <function>realloc<parameter/></function>; rather
      it is provided solely as a tool for introspection purposes.  Any
      discrepancy between the requested allocation size and the size reported
      by <function>malloc_usable_size<parameter/></function> should not be
      depended on, since such behavior is entirely implementation-dependent.
      </para>
    </refsect2>
  </refsect1>
  <refsect1 id="tuning">
    <title>TUNING</title>
    <para>Once, when the first call is made to one of the memory allocation
    routines, the allocator initializes its internals based in part on various
    options that can be specified at compile- or run-time.</para>

    <para>The string specified via <option>--with-malloc-conf</option>, the
    string pointed to by the global variable <varname>malloc_conf</varname>, the
    &ldquo;name&rdquo; of the file referenced by the symbolic link named
    <filename class="symlink">/etc/malloc.conf</filename>, and the value of the
    environment variable <envar>MALLOC_CONF</envar>, will be interpreted, in
    that order, from left to right as options.  Note that
    <varname>malloc_conf</varname> may be read before
    <function>main<parameter/></function> is entered, so the declaration of
    <varname>malloc_conf</varname> should specify an initializer that contains
    the final value to be read by jemalloc.  <option>--with-malloc-conf</option>
    and <varname>malloc_conf</varname> are compile-time mechanisms, whereas
    <filename class="symlink">/etc/malloc.conf</filename> and
    <envar>MALLOC_CONF</envar> can be safely set any time prior to program
    invocation.</para>

    <para>An options string is a comma-separated list of option:value pairs.
    There is one key corresponding to each <link
    linkend="opt.abort"><mallctl>opt.*</mallctl></link> mallctl (see the <xref
    linkend="mallctl_namespace" xrefstyle="template:%t"/> section for options
    documentation).  For example, <literal>abort:true,narenas:1</literal> sets
    the <link linkend="opt.abort"><mallctl>opt.abort</mallctl></link> and <link
    linkend="opt.narenas"><mallctl>opt.narenas</mallctl></link> options.  Some
    options have boolean values (true/false), others have integer values (base
    8, 10, or 16, depending on prefix), and yet others have raw string
    values.</para>
  </refsect1>
  <refsect1 id="implementation_notes">
    <title>IMPLEMENTATION NOTES</title>
    <para>Traditionally, allocators have used
    <citerefentry><refentrytitle>sbrk</refentrytitle>
    <manvolnum>2</manvolnum></citerefentry> to obtain memory, which is
    suboptimal for several reasons, including race conditions, increased
    fragmentation, and artificial limitations on maximum usable memory.  If
    <citerefentry><refentrytitle>sbrk</refentrytitle>
    <manvolnum>2</manvolnum></citerefentry> is supported by the operating
    system, this allocator uses both
    <citerefentry><refentrytitle>mmap</refentrytitle>
    <manvolnum>2</manvolnum></citerefentry> and
    <citerefentry><refentrytitle>sbrk</refentrytitle>
    <manvolnum>2</manvolnum></citerefentry>, in that order of preference;
    otherwise only <citerefentry><refentrytitle>mmap</refentrytitle>
    <manvolnum>2</manvolnum></citerefentry> is used.</para>

    <para>This allocator uses multiple arenas in order to reduce lock
    contention for threaded programs on multi-processor systems.  This works
    well with regard to threading scalability, but incurs some costs.  There is
    a small fixed per-arena overhead, and additionally, arenas manage memory
    completely independently of each other, which means a small fixed increase
    in overall memory fragmentation.  These overheads are not generally an
    issue, given the number of arenas normally used.  Note that using
    substantially more arenas than the default is not likely to improve
    performance, mainly due to reduced cache performance.  However, it may make
    sense to reduce the number of arenas if an application does not make much
    use of the allocation functions.</para>

    <para>In addition to multiple arenas, unless
    <option>--disable-tcache</option> is specified during configuration, this
    allocator supports thread-specific caching for small and large objects, in
    order to make it possible to completely avoid synchronization for most
    allocation requests.  Such caching allows very fast allocation in the
    common case, but it increases memory usage and fragmentation, since a
    bounded number of objects can remain allocated in each thread cache.</para>

    <para>Memory is conceptually broken into equal-sized chunks, where the
    chunk size is a power of two that is greater than the page size.  Chunks
    are always aligned to multiples of the chunk size.  This alignment makes it
    possible to find metadata for user objects very quickly.</para>

    <para>User objects are broken into three categories according to size:
    small, large, and huge.  Small and large objects are managed entirely by
    arenas; huge objects are additionally aggregated in a single data structure
    that is shared by all threads.  Huge objects are typically used by
    applications infrequently enough that this single data structure is not a
    scalability issue.</para>

    <para>Each chunk that is managed by an arena tracks its contents as runs of
    contiguous pages (unused, backing a set of small objects, or backing one
    large object).  The combination of chunk alignment and chunk page maps
    makes it possible to determine all metadata regarding small and large
    allocations in constant time.</para>

    <para>Small objects are managed in groups by page runs.  Each run maintains
    a bitmap to track which regions are in use.  Allocation requests that are no
    more than half the quantum (8 or 16, depending on architecture) are rounded
    up to the nearest power of two that is at least <code
    language="C">sizeof(<type>double</type>)</code>.  All other object size
    classes are multiples of the quantum, spaced such that there are four size
    classes for each doubling in size, which limits internal fragmentation to
    approximately 20% for all but the smallest size classes.  Small size classes
    are smaller than four times the page size, large size classes are smaller
    than the chunk size (see the <link
    linkend="opt.lg_chunk"><mallctl>opt.lg_chunk</mallctl></link> option), and
    huge size classes extend from the chunk size up to one size class less than
    the full address space size.</para>

    <para>Allocations are packed tightly together, which can be an issue for
    multi-threaded applications.  If you need to assure that allocations do not
    suffer from cacheline sharing, round your allocation requests up to the
    nearest multiple of the cacheline size, or specify cacheline alignment when
    allocating.</para>

    <para>The <function>realloc<parameter/></function>,
    <function>rallocx<parameter/></function>, and
    <function>xallocx<parameter/></function> functions may resize allocations
    without moving them under limited circumstances.  Unlike the
    <function>*allocx<parameter/></function> API, the standard API does not
    officially round up the usable size of an allocation to the nearest size
    class, so technically it is necessary to call
    <function>realloc<parameter/></function> to grow e.g. a 9-byte allocation to
    16 bytes, or shrink a 16-byte allocation to 9 bytes.  Growth and shrinkage
    trivially succeeds in place as long as the pre-size and post-size both round
    up to the same size class.  No other API guarantees are made regarding
    in-place resizing, but the current implementation also tries to resize large
    and huge allocations in place, as long as the pre-size and post-size are
    both large or both huge.  In such cases shrinkage always succeeds for large
    size classes, but for huge size classes the chunk allocator must support
    splitting (see <link
    linkend="arena.i.chunk_hooks"><mallctl>arena.&lt;i&gt;.chunk_hooks</mallctl></link>).
    Growth only succeeds if the trailing memory is currently available, and
    additionally for huge size classes the chunk allocator must support
    merging.</para>

    <para>Assuming 2 MiB chunks, 4 KiB pages, and a 16-byte quantum on a
    64-bit system, the size classes in each category are as shown in <xref
    linkend="size_classes" xrefstyle="template:Table %n"/>.</para>

    <table xml:id="size_classes" frame="all">
      <title>Size classes</title>
      <tgroup cols="3" colsep="1" rowsep="1">
      <colspec colname="c1" align="left"/>
      <colspec colname="c2" align="right"/>
      <colspec colname="c3" align="left"/>
      <thead>
        <row>
          <entry>Category</entry>
          <entry>Spacing</entry>
          <entry>Size</entry>
        </row>
      </thead>
      <tbody>
        <row>
          <entry morerows="8">Small</entry>
          <entry>lg</entry>
          <entry>[8]</entry>
        </row>
        <row>
          <entry>16</entry>
          <entry>[16, 32, 48, 64, 80, 96, 112, 128]</entry>
        </row>
        <row>
          <entry>32</entry>
          <entry>[160, 192, 224, 256]</entry>
        </row>
        <row>
          <entry>64</entry>
          <entry>[320, 384, 448, 512]</entry>
        </row>
        <row>
          <entry>128</entry>
          <entry>[640, 768, 896, 1024]</entry>
        </row>
        <row>
          <entry>256</entry>
          <entry>[1280, 1536, 1792, 2048]</entry>
        </row>
        <row>
          <entry>512</entry>
          <entry>[2560, 3072, 3584, 4096]</entry>
        </row>
        <row>
          <entry>1 KiB</entry>
          <entry>[5 KiB, 6 KiB, 7 KiB, 8 KiB]</entry>
        </row>
        <row>
          <entry>2 KiB</entry>
          <entry>[10 KiB, 12 KiB, 14 KiB]</entry>
        </row>
        <row>
          <entry morerows="7">Large</entry>
          <entry>2 KiB</entry>
          <entry>[16 KiB]</entry>
        </row>
        <row>
          <entry>4 KiB</entry>
          <entry>[20 KiB, 24 KiB, 28 KiB, 32 KiB]</entry>
        </row>
        <row>
          <entry>8 KiB</entry>
          <entry>[40 KiB, 48 KiB, 54 KiB, 64 KiB]</entry>
        </row>
        <row>
          <entry>16 KiB</entry>
          <entry>[80 KiB, 96 KiB, 112 KiB, 128 KiB]</entry>
        </row>
        <row>
          <entry>32 KiB</entry>
          <entry>[160 KiB, 192 KiB, 224 KiB, 256 KiB]</entry>
        </row>
        <row>
          <entry>64 KiB</entry>
          <entry>[320 KiB, 384 KiB, 448 KiB, 512 KiB]</entry>
        </row>
        <row>
          <entry>128 KiB</entry>
          <entry>[640 KiB, 768 KiB, 896 KiB, 1 MiB]</entry>
        </row>
        <row>
          <entry>256 KiB</entry>
          <entry>[1280 KiB, 1536 KiB, 1792 KiB]</entry>
        </row>
        <row>
          <entry morerows="6">Huge</entry>
          <entry>256 KiB</entry>
          <entry>[2 MiB]</entry>
        </row>
        <row>
          <entry>512 KiB</entry>
          <entry>[2560 KiB, 3 MiB, 3584 KiB, 4 MiB]</entry>
        </row>
        <row>
          <entry>1 MiB</entry>
          <entry>[5 MiB, 6 MiB, 7 MiB, 8 MiB]</entry>
        </row>
        <row>
          <entry>2 MiB</entry>
          <entry>[10 MiB, 12 MiB, 14 MiB, 16 MiB]</entry>
        </row>
        <row>
          <entry>4 MiB</entry>
          <entry>[20 MiB, 24 MiB, 28 MiB, 32 MiB]</entry>
        </row>
        <row>
          <entry>8 MiB</entry>
          <entry>[40 MiB, 48 MiB, 56 MiB, 64 MiB]</entry>
        </row>
        <row>
          <entry>...</entry>
          <entry>...</entry>
        </row>
      </tbody>
      </tgroup>
    </table>
  </refsect1>
  <refsect1 id="mallctl_namespace">
    <title>MALLCTL NAMESPACE</title>
    <para>The following names are defined in the namespace accessible via the
    <function>mallctl*<parameter/></function> functions.  Value types are
    specified in parentheses, their readable/writable statuses are encoded as
    <literal>rw</literal>, <literal>r-</literal>, <literal>-w</literal>, or
    <literal>--</literal>, and required build configuration flags follow, if
    any.  A name element encoded as <literal>&lt;i&gt;</literal> or
    <literal>&lt;j&gt;</literal> indicates an integer component, where the
    integer varies from 0 to some upper value that must be determined via
    introspection.  In the case of <mallctl>stats.arenas.&lt;i&gt;.*</mallctl>,
    <literal>&lt;i&gt;</literal> equal to <link
    linkend="arenas.narenas"><mallctl>arenas.narenas</mallctl></link> can be
    used to access the summation of statistics from all arenas.  Take special
    note of the <link linkend="epoch"><mallctl>epoch</mallctl></link> mallctl,
    which controls refreshing of cached dynamic statistics.</para>

    <variablelist>
      <varlistentry id="version">
        <term>
          <mallctl>version</mallctl>
          (<type>const char *</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Return the jemalloc version string.</para></listitem>
      </varlistentry>

      <varlistentry id="epoch">
        <term>
          <mallctl>epoch</mallctl>
          (<type>uint64_t</type>)
          <literal>rw</literal>
        </term>
        <listitem><para>If a value is passed in, refresh the data from which
        the <function>mallctl*<parameter/></function> functions report values,
        and increment the epoch.  Return the current epoch.  This is useful for
        detecting whether another thread caused a refresh.</para></listitem>
      </varlistentry>

      <varlistentry id="config.cache_oblivious">
        <term>
          <mallctl>config.cache_oblivious</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--enable-cache-oblivious</option> was specified
        during build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.debug">
        <term>
          <mallctl>config.debug</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--enable-debug</option> was specified during
        build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.fill">
        <term>
          <mallctl>config.fill</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--enable-fill</option> was specified during
        build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.lazy_lock">
        <term>
          <mallctl>config.lazy_lock</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--enable-lazy-lock</option> was specified
        during build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.malloc_conf">
        <term>
          <mallctl>config.malloc_conf</mallctl>
          (<type>const char *</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Embedded configure-time-specified run-time options
        string, empty unless <option>--with-malloc-conf</option> was specified
        during build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.munmap">
        <term>
          <mallctl>config.munmap</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--enable-munmap</option> was specified during
        build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.prof">
        <term>
          <mallctl>config.prof</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--enable-prof</option> was specified during
        build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.prof_libgcc">
        <term>
          <mallctl>config.prof_libgcc</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--disable-prof-libgcc</option> was not
        specified during build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.prof_libunwind">
        <term>
          <mallctl>config.prof_libunwind</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--enable-prof-libunwind</option> was specified
        during build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.stats">
        <term>
          <mallctl>config.stats</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--enable-stats</option> was specified during
        build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.tcache">
        <term>
          <mallctl>config.tcache</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--disable-tcache</option> was not specified
        during build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.tls">
        <term>
          <mallctl>config.tls</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--disable-tls</option> was not specified during
        build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.utrace">
        <term>
          <mallctl>config.utrace</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--enable-utrace</option> was specified during
        build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.valgrind">
        <term>
          <mallctl>config.valgrind</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--enable-valgrind</option> was specified during
        build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="config.xmalloc">
        <term>
          <mallctl>config.xmalloc</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para><option>--enable-xmalloc</option> was specified during
        build configuration.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.abort">
        <term>
          <mallctl>opt.abort</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Abort-on-warning enabled/disabled.  If true, most
        warnings are fatal.  The process will call
        <citerefentry><refentrytitle>abort</refentrytitle>
        <manvolnum>3</manvolnum></citerefentry> in these cases.  This option is
        disabled by default unless <option>--enable-debug</option> is
        specified during configuration, in which case it is enabled by default.
        </para></listitem>
      </varlistentry>

      <varlistentry id="opt.dss">
        <term>
          <mallctl>opt.dss</mallctl>
          (<type>const char *</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>dss (<citerefentry><refentrytitle>sbrk</refentrytitle>
        <manvolnum>2</manvolnum></citerefentry>) allocation precedence as
        related to <citerefentry><refentrytitle>mmap</refentrytitle>
        <manvolnum>2</manvolnum></citerefentry> allocation.  The following
        settings are supported if
        <citerefentry><refentrytitle>sbrk</refentrytitle>
        <manvolnum>2</manvolnum></citerefentry> is supported by the operating
        system: &ldquo;disabled&rdquo;, &ldquo;primary&rdquo;, and
        &ldquo;secondary&rdquo;; otherwise only &ldquo;disabled&rdquo; is
        supported.  The default is &ldquo;secondary&rdquo; if
        <citerefentry><refentrytitle>sbrk</refentrytitle>
        <manvolnum>2</manvolnum></citerefentry> is supported by the operating
        system; &ldquo;disabled&rdquo; otherwise.
        </para></listitem>
      </varlistentry>

      <varlistentry id="opt.lg_chunk">
        <term>
          <mallctl>opt.lg_chunk</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Virtual memory chunk size (log base 2).  If a chunk
        size outside the supported size range is specified, the size is
        silently clipped to the minimum/maximum supported size.  The default
        chunk size is 2 MiB (2^21).
        </para></listitem>
      </varlistentry>

      <varlistentry id="opt.narenas">
        <term>
          <mallctl>opt.narenas</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Maximum number of arenas to use for automatic
        multiplexing of threads and arenas.  The default is four times the
        number of CPUs, or one if there is a single CPU.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.lg_dirty_mult">
        <term>
          <mallctl>opt.lg_dirty_mult</mallctl>
          (<type>ssize_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Per-arena minimum ratio (log base 2) of active to dirty
        pages.  Some dirty unused pages may be allowed to accumulate, within
        the limit set by the ratio (or one chunk worth of dirty pages,
        whichever is greater), before informing the kernel about some of those
        pages via <citerefentry><refentrytitle>madvise</refentrytitle>
        <manvolnum>2</manvolnum></citerefentry> or a similar system call.  This
        provides the kernel with sufficient information to recycle dirty pages
        if physical memory becomes scarce and the pages remain unused.  The
        default minimum ratio is 8:1 (2^3:1); an option value of -1 will
        disable dirty page purging.  See <link
        linkend="arenas.lg_dirty_mult"><mallctl>arenas.lg_dirty_mult</mallctl></link>
        and <link
        linkend="arena.i.lg_dirty_mult"><mallctl>arena.&lt;i&gt;.lg_dirty_mult</mallctl></link>
        for related dynamic control options.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.stats_print">
        <term>
          <mallctl>opt.stats_print</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Enable/disable statistics printing at exit.  If
        enabled, the <function>malloc_stats_print<parameter/></function>
        function is called at program exit via an
        <citerefentry><refentrytitle>atexit</refentrytitle>
        <manvolnum>3</manvolnum></citerefentry> function.  If
        <option>--enable-stats</option> is specified during configuration, this
        has the potential to cause deadlock for a multi-threaded process that
        exits while one or more threads are executing in the memory allocation
        functions.  Furthermore, <function>atexit<parameter/></function> may
        allocate memory during application initialization and then deadlock
        internally when jemalloc in turn calls
        <function>atexit<parameter/></function>, so this option is not
        univerally usable (though the application can register its own
        <function>atexit<parameter/></function> function with equivalent
        functionality).  Therefore, this option should only be used with care;
        it is primarily intended as a performance tuning aid during application
        development.  This option is disabled by default.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.junk">
        <term>
          <mallctl>opt.junk</mallctl>
          (<type>const char *</type>)
          <literal>r-</literal>
          [<option>--enable-fill</option>]
        </term>
        <listitem><para>Junk filling.  If set to "alloc", each byte of
        uninitialized allocated memory will be initialized to
        <literal>0xa5</literal>.  If set to "free", all deallocated memory will
        be initialized to <literal>0x5a</literal>.  If set to "true", both
        allocated and deallocated memory will be initialized, and if set to
        "false", junk filling be disabled entirely.  This is intended for
        debugging and will impact performance negatively.  This option is
        "false" by default unless <option>--enable-debug</option> is specified
        during configuration, in which case it is "true" by default unless
        running inside <ulink
        url="http://valgrind.org/">Valgrind</ulink>.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.quarantine">
        <term>
          <mallctl>opt.quarantine</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-fill</option>]
        </term>
        <listitem><para>Per thread quarantine size in bytes.  If non-zero, each
        thread maintains a FIFO object quarantine that stores up to the
        specified number of bytes of memory.  The quarantined memory is not
        freed until it is released from quarantine, though it is immediately
        junk-filled if the <link
        linkend="opt.junk"><mallctl>opt.junk</mallctl></link> option is
        enabled.  This feature is of particular use in combination with <ulink
        url="http://valgrind.org/">Valgrind</ulink>, which can detect attempts
        to access quarantined objects.  This is intended for debugging and will
        impact performance negatively.  The default quarantine size is 0 unless
        running inside Valgrind, in which case the default is 16
        MiB.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.redzone">
        <term>
          <mallctl>opt.redzone</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-fill</option>]
        </term>
        <listitem><para>Redzones enabled/disabled.  If enabled, small
        allocations have redzones before and after them.  Furthermore, if the
        <link linkend="opt.junk"><mallctl>opt.junk</mallctl></link> option is
        enabled, the redzones are checked for corruption during deallocation.
        However, the primary intended purpose of this feature is to be used in
        combination with <ulink url="http://valgrind.org/">Valgrind</ulink>,
        which needs redzones in order to do effective buffer overflow/underflow
        detection.  This option is intended for debugging and will impact
        performance negatively.  This option is disabled by
        default unless running inside Valgrind.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.zero">
        <term>
          <mallctl>opt.zero</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-fill</option>]
        </term>
        <listitem><para>Zero filling enabled/disabled.  If enabled, each byte
        of uninitialized allocated memory will be initialized to 0.  Note that
        this initialization only happens once for each byte, so
        <function>realloc<parameter/></function> and
        <function>rallocx<parameter/></function> calls do not zero memory that
        was previously allocated.  This is intended for debugging and will
        impact performance negatively.  This option is disabled by default.
        </para></listitem>
      </varlistentry>

      <varlistentry id="opt.utrace">
        <term>
          <mallctl>opt.utrace</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-utrace</option>]
        </term>
        <listitem><para>Allocation tracing based on
        <citerefentry><refentrytitle>utrace</refentrytitle>
        <manvolnum>2</manvolnum></citerefentry> enabled/disabled.  This option
        is disabled by default.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.xmalloc">
        <term>
          <mallctl>opt.xmalloc</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-xmalloc</option>]
        </term>
        <listitem><para>Abort-on-out-of-memory enabled/disabled.  If enabled,
        rather than returning failure for any allocation function, display a
        diagnostic message on <constant>STDERR_FILENO</constant> and cause the
        program to drop core (using
        <citerefentry><refentrytitle>abort</refentrytitle>
        <manvolnum>3</manvolnum></citerefentry>).  If an application is
        designed to depend on this behavior, set the option at compile time by
        including the following in the source code:
        <programlisting language="C"><![CDATA[
malloc_conf = "xmalloc:true";]]></programlisting>
        This option is disabled by default.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.tcache">
        <term>
          <mallctl>opt.tcache</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-tcache</option>]
        </term>
        <listitem><para>Thread-specific caching (tcache) enabled/disabled.  When
        there are multiple threads, each thread uses a tcache for objects up to
        a certain size.  Thread-specific caching allows many allocations to be
        satisfied without performing any thread synchronization, at the cost of
        increased memory use.  See the <link
        linkend="opt.lg_tcache_max"><mallctl>opt.lg_tcache_max</mallctl></link>
        option for related tuning information.  This option is enabled by
        default unless running inside <ulink
        url="http://valgrind.org/">Valgrind</ulink>, in which case it is
        forcefully disabled.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.lg_tcache_max">
        <term>
          <mallctl>opt.lg_tcache_max</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-tcache</option>]
        </term>
        <listitem><para>Maximum size class (log base 2) to cache in the
        thread-specific cache (tcache).  At a minimum, all small size classes
        are cached, and at a maximum all large size classes are cached.  The
        default maximum is 32 KiB (2^15).</para></listitem>
      </varlistentry>

      <varlistentry id="opt.prof">
        <term>
          <mallctl>opt.prof</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Memory profiling enabled/disabled.  If enabled, profile
        memory allocation activity.  See the <link
        linkend="opt.prof_active"><mallctl>opt.prof_active</mallctl></link>
        option for on-the-fly activation/deactivation.  See the <link
        linkend="opt.lg_prof_sample"><mallctl>opt.lg_prof_sample</mallctl></link>
        option for probabilistic sampling control.  See the <link
        linkend="opt.prof_accum"><mallctl>opt.prof_accum</mallctl></link>
        option for control of cumulative sample reporting.  See the <link
        linkend="opt.lg_prof_interval"><mallctl>opt.lg_prof_interval</mallctl></link>
        option for information on interval-triggered profile dumping, the <link
        linkend="opt.prof_gdump"><mallctl>opt.prof_gdump</mallctl></link>
        option for information on high-water-triggered profile dumping, and the
        <link linkend="opt.prof_final"><mallctl>opt.prof_final</mallctl></link>
        option for final profile dumping.  Profile output is compatible with
        the <command>jeprof</command> command, which is based on the
        <command>pprof</command> that is developed as part of the <ulink
        url="http://code.google.com/p/gperftools/">gperftools
        package</ulink>.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.prof_prefix">
        <term>
          <mallctl>opt.prof_prefix</mallctl>
          (<type>const char *</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Filename prefix for profile dumps.  If the prefix is
        set to the empty string, no automatic dumps will occur; this is
        primarily useful for disabling the automatic final heap dump (which
        also disables leak reporting, if enabled).  The default prefix is
        <filename>jeprof</filename>.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.prof_active">
        <term>
          <mallctl>opt.prof_active</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Profiling activated/deactivated.  This is a secondary
        control mechanism that makes it possible to start the application with
        profiling enabled (see the <link
        linkend="opt.prof"><mallctl>opt.prof</mallctl></link> option) but
        inactive, then toggle profiling at any time during program execution
        with the <link
        linkend="prof.active"><mallctl>prof.active</mallctl></link> mallctl.
        This option is enabled by default.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.prof_thread_active_init">
        <term>
          <mallctl>opt.prof_thread_active_init</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Initial setting for <link
        linkend="thread.prof.active"><mallctl>thread.prof.active</mallctl></link>
        in newly created threads.  The initial setting for newly created threads
        can also be changed during execution via the <link
        linkend="prof.thread_active_init"><mallctl>prof.thread_active_init</mallctl></link>
        mallctl.  This option is enabled by default.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.lg_prof_sample">
        <term>
          <mallctl>opt.lg_prof_sample</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Average interval (log base 2) between allocation
        samples, as measured in bytes of allocation activity.  Increasing the
        sampling interval decreases profile fidelity, but also decreases the
        computational overhead.  The default sample interval is 512 KiB (2^19
        B).</para></listitem>
      </varlistentry>

      <varlistentry id="opt.prof_accum">
        <term>
          <mallctl>opt.prof_accum</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Reporting of cumulative object/byte counts in profile
        dumps enabled/disabled.  If this option is enabled, every unique
        backtrace must be stored for the duration of execution.  Depending on
        the application, this can impose a large memory overhead, and the
        cumulative counts are not always of interest.  This option is disabled
        by default.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.lg_prof_interval">
        <term>
          <mallctl>opt.lg_prof_interval</mallctl>
          (<type>ssize_t</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Average interval (log base 2) between memory profile
        dumps, as measured in bytes of allocation activity.  The actual
        interval between dumps may be sporadic because decentralized allocation
        counters are used to avoid synchronization bottlenecks.  Profiles are
        dumped to files named according to the pattern
        <filename>&lt;prefix&gt;.&lt;pid&gt;.&lt;seq&gt;.i&lt;iseq&gt;.heap</filename>,
        where <literal>&lt;prefix&gt;</literal> is controlled by the
        <link
        linkend="opt.prof_prefix"><mallctl>opt.prof_prefix</mallctl></link>
        option.  By default, interval-triggered profile dumping is disabled
        (encoded as -1).
        </para></listitem>
      </varlistentry>

      <varlistentry id="opt.prof_gdump">
        <term>
          <mallctl>opt.prof_gdump</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Set the initial state of <link
        linkend="prof.gdump"><mallctl>prof.gdump</mallctl></link>, which when
        enabled triggers a memory profile dump every time the total virtual
        memory exceeds the previous maximum.  This option is disabled by
        default.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.prof_final">
        <term>
          <mallctl>opt.prof_final</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Use an
        <citerefentry><refentrytitle>atexit</refentrytitle>
        <manvolnum>3</manvolnum></citerefentry> function to dump final memory
        usage to a file named according to the pattern
        <filename>&lt;prefix&gt;.&lt;pid&gt;.&lt;seq&gt;.f.heap</filename>,
        where <literal>&lt;prefix&gt;</literal> is controlled by the <link
        linkend="opt.prof_prefix"><mallctl>opt.prof_prefix</mallctl></link>
        option.  Note that <function>atexit<parameter/></function> may allocate
        memory during application initialization and then deadlock internally
        when jemalloc in turn calls <function>atexit<parameter/></function>, so
        this option is not univerally usable (though the application can
        register its own <function>atexit<parameter/></function> function with
        equivalent functionality).  This option is disabled by
        default.</para></listitem>
      </varlistentry>

      <varlistentry id="opt.prof_leak">
        <term>
          <mallctl>opt.prof_leak</mallctl>
          (<type>bool</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Leak reporting enabled/disabled.  If enabled, use an
        <citerefentry><refentrytitle>atexit</refentrytitle>
        <manvolnum>3</manvolnum></citerefentry> function to report memory leaks
        detected by allocation sampling.  See the
        <link linkend="opt.prof"><mallctl>opt.prof</mallctl></link> option for
        information on analyzing heap profile output.  This option is disabled
        by default.</para></listitem>
      </varlistentry>

      <varlistentry id="thread.arena">
        <term>
          <mallctl>thread.arena</mallctl>
          (<type>unsigned</type>)
          <literal>rw</literal>
        </term>
        <listitem><para>Get or set the arena associated with the calling
        thread.  If the specified arena was not initialized beforehand (see the
        <link
        linkend="arenas.initialized"><mallctl>arenas.initialized</mallctl></link>
        mallctl), it will be automatically initialized as a side effect of
        calling this interface.</para></listitem>
      </varlistentry>

      <varlistentry id="thread.allocated">
        <term>
          <mallctl>thread.allocated</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Get the total number of bytes ever allocated by the
        calling thread.  This counter has the potential to wrap around; it is
        up to the application to appropriately interpret the counter in such
        cases.</para></listitem>
      </varlistentry>

      <varlistentry id="thread.allocatedp">
        <term>
          <mallctl>thread.allocatedp</mallctl>
          (<type>uint64_t *</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Get a pointer to the the value that is returned by the
        <link
        linkend="thread.allocated"><mallctl>thread.allocated</mallctl></link>
        mallctl.  This is useful for avoiding the overhead of repeated
        <function>mallctl*<parameter/></function> calls.</para></listitem>
      </varlistentry>

      <varlistentry id="thread.deallocated">
        <term>
          <mallctl>thread.deallocated</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Get the total number of bytes ever deallocated by the
        calling thread.  This counter has the potential to wrap around; it is
        up to the application to appropriately interpret the counter in such
        cases.</para></listitem>
      </varlistentry>

      <varlistentry id="thread.deallocatedp">
        <term>
          <mallctl>thread.deallocatedp</mallctl>
          (<type>uint64_t *</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Get a pointer to the the value that is returned by the
        <link
        linkend="thread.deallocated"><mallctl>thread.deallocated</mallctl></link>
        mallctl.  This is useful for avoiding the overhead of repeated
        <function>mallctl*<parameter/></function> calls.</para></listitem>
      </varlistentry>

      <varlistentry id="thread.tcache.enabled">
        <term>
          <mallctl>thread.tcache.enabled</mallctl>
          (<type>bool</type>)
          <literal>rw</literal>
          [<option>--enable-tcache</option>]
        </term>
        <listitem><para>Enable/disable calling thread's tcache.  The tcache is
        implicitly flushed as a side effect of becoming
        disabled (see <link
        linkend="thread.tcache.flush"><mallctl>thread.tcache.flush</mallctl></link>).
        </para></listitem>
      </varlistentry>

      <varlistentry id="thread.tcache.flush">
        <term>
          <mallctl>thread.tcache.flush</mallctl>
          (<type>void</type>)
          <literal>--</literal>
          [<option>--enable-tcache</option>]
        </term>
        <listitem><para>Flush calling thread's thread-specific cache (tcache).
        This interface releases all cached objects and internal data structures
        associated with the calling thread's tcache.  Ordinarily, this interface
        need not be called, since automatic periodic incremental garbage
        collection occurs, and the thread cache is automatically discarded when
        a thread exits.  However, garbage collection is triggered by allocation
        activity, so it is possible for a thread that stops
        allocating/deallocating to retain its cache indefinitely, in which case
        the developer may find manual flushing useful.</para></listitem>
      </varlistentry>

      <varlistentry id="thread.prof.name">
        <term>
          <mallctl>thread.prof.name</mallctl>
          (<type>const char *</type>)
          <literal>r-</literal> or
          <literal>-w</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Get/set the descriptive name associated with the calling
        thread in memory profile dumps.  An internal copy of the name string is
        created, so the input string need not be maintained after this interface
        completes execution.  The output string of this interface should be
        copied for non-ephemeral uses, because multiple implementation details
        can cause asynchronous string deallocation.  Furthermore, each
        invocation of this interface can only read or write; simultaneous
        read/write is not supported due to string lifetime limitations.  The
        name string must be nil-terminated and comprised only of characters in
        the sets recognized
        by <citerefentry><refentrytitle>isgraph</refentrytitle>
        <manvolnum>3</manvolnum></citerefentry> and
        <citerefentry><refentrytitle>isblank</refentrytitle>
        <manvolnum>3</manvolnum></citerefentry>.</para></listitem>
      </varlistentry>

      <varlistentry id="thread.prof.active">
        <term>
          <mallctl>thread.prof.active</mallctl>
          (<type>bool</type>)
          <literal>rw</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Control whether sampling is currently active for the
        calling thread.  This is an activation mechanism in addition to <link
        linkend="prof.active"><mallctl>prof.active</mallctl></link>; both must
        be active for the calling thread to sample.  This flag is enabled by
        default.</para></listitem>
      </varlistentry>

      <varlistentry id="tcache.create">
        <term>
          <mallctl>tcache.create</mallctl>
          (<type>unsigned</type>)
          <literal>r-</literal>
          [<option>--enable-tcache</option>]
        </term>
        <listitem><para>Create an explicit thread-specific cache (tcache) and
        return an identifier that can be passed to the <link
        linkend="MALLOCX_TCACHE"><constant>MALLOCX_TCACHE(<parameter>tc</parameter>)</constant></link>
        macro to explicitly use the specified cache rather than the
        automatically managed one that is used by default.  Each explicit cache
        can be used by only one thread at a time; the application must assure
        that this constraint holds.
        </para></listitem>
      </varlistentry>

      <varlistentry id="tcache.flush">
        <term>
          <mallctl>tcache.flush</mallctl>
          (<type>unsigned</type>)
          <literal>-w</literal>
          [<option>--enable-tcache</option>]
        </term>
        <listitem><para>Flush the specified thread-specific cache (tcache).  The
        same considerations apply to this interface as to <link
        linkend="thread.tcache.flush"><mallctl>thread.tcache.flush</mallctl></link>,
        except that the tcache will never be automatically discarded.
        </para></listitem>
      </varlistentry>

      <varlistentry id="tcache.destroy">
        <term>
          <mallctl>tcache.destroy</mallctl>
          (<type>unsigned</type>)
          <literal>-w</literal>
          [<option>--enable-tcache</option>]
        </term>
        <listitem><para>Flush the specified thread-specific cache (tcache) and
        make the identifier available for use during a future tcache creation.
        </para></listitem>
      </varlistentry>

      <varlistentry id="arena.i.purge">
        <term>
          <mallctl>arena.&lt;i&gt;.purge</mallctl>
          (<type>void</type>)
          <literal>--</literal>
        </term>
        <listitem><para>Purge unused dirty pages for arena &lt;i&gt;, or for
        all arenas if &lt;i&gt; equals <link
        linkend="arenas.narenas"><mallctl>arenas.narenas</mallctl></link>.
        </para></listitem>
      </varlistentry>

      <varlistentry id="arena.i.dss">
        <term>
          <mallctl>arena.&lt;i&gt;.dss</mallctl>
          (<type>const char *</type>)
          <literal>rw</literal>
        </term>
        <listitem><para>Set the precedence of dss allocation as related to mmap
        allocation for arena &lt;i&gt;, or for all arenas if &lt;i&gt; equals
        <link
        linkend="arenas.narenas"><mallctl>arenas.narenas</mallctl></link>.  See
        <link linkend="opt.dss"><mallctl>opt.dss</mallctl></link> for supported
        settings.</para></listitem>
      </varlistentry>

      <varlistentry id="arena.i.lg_dirty_mult">
        <term>
          <mallctl>arena.&lt;i&gt;.lg_dirty_mult</mallctl>
          (<type>ssize_t</type>)
          <literal>rw</literal>
        </term>
        <listitem><para>Current per-arena minimum ratio (log base 2) of active
        to dirty pages for arena &lt;i&gt;.  Each time this interface is set and
        the ratio is increased, pages are synchronously purged as necessary to
        impose the new ratio.  See <link
        linkend="opt.lg_dirty_mult"><mallctl>opt.lg_dirty_mult</mallctl></link>
        for additional information.</para></listitem>
      </varlistentry>

      <varlistentry id="arena.i.chunk_hooks">
        <term>
          <mallctl>arena.&lt;i&gt;.chunk_hooks</mallctl>
          (<type>chunk_hooks_t</type>)
          <literal>rw</literal>
        </term>
        <listitem><para>Get or set the chunk management hook functions for arena
        &lt;i&gt;.  The functions must be capable of operating on all extant
        chunks associated with arena &lt;i&gt;, usually by passing unknown
        chunks to the replaced functions.  In practice, it is feasible to
        control allocation for arenas created via <link
        linkend="arenas.extend"><mallctl>arenas.extend</mallctl></link> such
        that all chunks originate from an application-supplied chunk allocator
        (by setting custom chunk hook functions just after arena creation), but
        the automatically created arenas may have already created chunks prior
        to the application having an opportunity to take over chunk
        allocation.</para>

        <programlisting language="C"><![CDATA[
typedef struct {
	chunk_alloc_t		*alloc;
	chunk_dalloc_t		*dalloc;
	chunk_commit_t		*commit;
	chunk_decommit_t	*decommit;
	chunk_purge_t		*purge;
	chunk_split_t		*split;
	chunk_merge_t		*merge;
} chunk_hooks_t;]]></programlisting>
        <para>The <type>chunk_hooks_t</type> structure comprises function
        pointers which are described individually below.  jemalloc uses these
        functions to manage chunk lifetime, which starts off with allocation of
        mapped committed memory, in the simplest case followed by deallocation.
        However, there are performance and platform reasons to retain chunks for
        later reuse.  Cleanup attempts cascade from deallocation to decommit to
        purging, which gives the chunk management functions opportunities to
        reject the most permanent cleanup operations in favor of less permanent
        (and often less costly) operations.  The chunk splitting and merging
        operations can also be opted out of, but this is mainly intended to
        support platforms on which virtual memory mappings provided by the
        operating system kernel do not automatically coalesce and split, e.g.
        Windows.</para>

        <funcsynopsis><funcprototype>
          <funcdef>typedef void *<function>(chunk_alloc_t)</function></funcdef>
          <paramdef>void *<parameter>chunk</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
          <paramdef>size_t <parameter>alignment</parameter></paramdef>
          <paramdef>bool *<parameter>zero</parameter></paramdef>
          <paramdef>bool *<parameter>commit</parameter></paramdef>
          <paramdef>unsigned <parameter>arena_ind</parameter></paramdef>
        </funcprototype></funcsynopsis>
        <literallayout></literallayout>
        <para>A chunk allocation function conforms to the
        <type>chunk_alloc_t</type> type and upon success returns a pointer to
        <parameter>size</parameter> bytes of mapped memory on behalf of arena
        <parameter>arena_ind</parameter> such that the chunk's base address is a
        multiple of <parameter>alignment</parameter>, as well as setting
        <parameter>*zero</parameter> to indicate whether the chunk is zeroed and
        <parameter>*commit</parameter> to indicate whether the chunk is
        committed.  Upon error the function returns <constant>NULL</constant>
        and leaves <parameter>*zero</parameter> and
        <parameter>*commit</parameter> unmodified.  The
        <parameter>size</parameter> parameter is always a multiple of the chunk
        size.  The <parameter>alignment</parameter> parameter is always a power
        of two at least as large as the chunk size.  Zeroing is mandatory if
        <parameter>*zero</parameter> is true upon function entry.  Committing is
        mandatory if <parameter>*commit</parameter> is true upon function entry.
        If <parameter>chunk</parameter> is not <constant>NULL</constant>, the
        returned pointer must be <parameter>chunk</parameter> on success or
        <constant>NULL</constant> on error.  Committed memory may be committed
        in absolute terms as on a system that does not overcommit, or in
        implicit terms as on a system that overcommits and satisfies physical
        memory needs on demand via soft page faults.  Note that replacing the
        default chunk allocation function makes the arena's <link
        linkend="arena.i.dss"><mallctl>arena.&lt;i&gt;.dss</mallctl></link>
        setting irrelevant.</para>

        <funcsynopsis><funcprototype>
          <funcdef>typedef bool <function>(chunk_dalloc_t)</function></funcdef>
          <paramdef>void *<parameter>chunk</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
          <paramdef>bool <parameter>committed</parameter></paramdef>
          <paramdef>unsigned <parameter>arena_ind</parameter></paramdef>
        </funcprototype></funcsynopsis>
        <literallayout></literallayout>
        <para>
        A chunk deallocation function conforms to the
        <type>chunk_dalloc_t</type> type and deallocates a
        <parameter>chunk</parameter> of given <parameter>size</parameter> with
        <parameter>committed</parameter>/decommited memory as indicated, on
        behalf of arena <parameter>arena_ind</parameter>, returning false upon
        success.  If the function returns true, this indicates opt-out from
        deallocation; the virtual memory mapping associated with the chunk
        remains mapped, in the same commit state, and available for future use,
        in which case it will be automatically retained for later reuse.</para>

        <funcsynopsis><funcprototype>
          <funcdef>typedef bool <function>(chunk_commit_t)</function></funcdef>
          <paramdef>void *<parameter>chunk</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
          <paramdef>size_t <parameter>offset</parameter></paramdef>
          <paramdef>size_t <parameter>length</parameter></paramdef>
          <paramdef>unsigned <parameter>arena_ind</parameter></paramdef>
        </funcprototype></funcsynopsis>
        <literallayout></literallayout>
        <para>A chunk commit function conforms to the
        <type>chunk_commit_t</type> type and commits zeroed physical memory to
        back pages within a <parameter>chunk</parameter> of given
        <parameter>size</parameter> at <parameter>offset</parameter> bytes,
        extending for <parameter>length</parameter> on behalf of arena
        <parameter>arena_ind</parameter>, returning false upon success.
        Committed memory may be committed in absolute terms as on a system that
        does not overcommit, or in implicit terms as on a system that
        overcommits and satisfies physical memory needs on demand via soft page
        faults. If the function returns true, this indicates insufficient
        physical memory to satisfy the request.</para>

        <funcsynopsis><funcprototype>
          <funcdef>typedef bool <function>(chunk_decommit_t)</function></funcdef>
          <paramdef>void *<parameter>chunk</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
          <paramdef>size_t <parameter>offset</parameter></paramdef>
          <paramdef>size_t <parameter>length</parameter></paramdef>
          <paramdef>unsigned <parameter>arena_ind</parameter></paramdef>
        </funcprototype></funcsynopsis>
        <literallayout></literallayout>
        <para>A chunk decommit function conforms to the
        <type>chunk_decommit_t</type> type and decommits any physical memory
        that is backing pages within a <parameter>chunk</parameter> of given
        <parameter>size</parameter> at <parameter>offset</parameter> bytes,
        extending for <parameter>length</parameter> on behalf of arena
        <parameter>arena_ind</parameter>, returning false upon success, in which
        case the pages will be committed via the chunk commit function before
        being reused.  If the function returns true, this indicates opt-out from
        decommit; the memory remains committed and available for future use, in
        which case it will be automatically retained for later reuse.</para>

        <funcsynopsis><funcprototype>
          <funcdef>typedef bool <function>(chunk_purge_t)</function></funcdef>
          <paramdef>void *<parameter>chunk</parameter></paramdef>
          <paramdef>size_t<parameter>size</parameter></paramdef>
          <paramdef>size_t <parameter>offset</parameter></paramdef>
          <paramdef>size_t <parameter>length</parameter></paramdef>
          <paramdef>unsigned <parameter>arena_ind</parameter></paramdef>
        </funcprototype></funcsynopsis>
        <literallayout></literallayout>
        <para>A chunk purge function conforms to the <type>chunk_purge_t</type>
        type and optionally discards physical pages within the virtual memory
        mapping associated with <parameter>chunk</parameter> of given
        <parameter>size</parameter> at <parameter>offset</parameter> bytes,
        extending for <parameter>length</parameter> on behalf of arena
        <parameter>arena_ind</parameter>, returning false if pages within the
        purged virtual memory range will be zero-filled the next time they are
        accessed.</para>

        <funcsynopsis><funcprototype>
          <funcdef>typedef bool <function>(chunk_split_t)</function></funcdef>
          <paramdef>void *<parameter>chunk</parameter></paramdef>
          <paramdef>size_t <parameter>size</parameter></paramdef>
          <paramdef>size_t <parameter>size_a</parameter></paramdef>
          <paramdef>size_t <parameter>size_b</parameter></paramdef>
          <paramdef>bool <parameter>committed</parameter></paramdef>
          <paramdef>unsigned <parameter>arena_ind</parameter></paramdef>
        </funcprototype></funcsynopsis>
        <literallayout></literallayout>
        <para>A chunk split function conforms to the <type>chunk_split_t</type>
        type and optionally splits <parameter>chunk</parameter> of given
        <parameter>size</parameter> into two adjacent chunks, the first of
        <parameter>size_a</parameter> bytes, and the second of
        <parameter>size_b</parameter> bytes, operating on
        <parameter>committed</parameter>/decommitted memory as indicated, on
        behalf of arena <parameter>arena_ind</parameter>, returning false upon
        success.  If the function returns true, this indicates that the chunk
        remains unsplit and therefore should continue to be operated on as a
        whole.</para>

        <funcsynopsis><funcprototype>
          <funcdef>typedef bool <function>(chunk_merge_t)</function></funcdef>
          <paramdef>void *<parameter>chunk_a</parameter></paramdef>
          <paramdef>size_t <parameter>size_a</parameter></paramdef>
          <paramdef>void *<parameter>chunk_b</parameter></paramdef>
          <paramdef>size_t <parameter>size_b</parameter></paramdef>
          <paramdef>bool <parameter>committed</parameter></paramdef>
          <paramdef>unsigned <parameter>arena_ind</parameter></paramdef>
        </funcprototype></funcsynopsis>
        <literallayout></literallayout>
        <para>A chunk merge function conforms to the <type>chunk_merge_t</type>
        type and optionally merges adjacent chunks,
        <parameter>chunk_a</parameter> of given <parameter>size_a</parameter>
        and <parameter>chunk_b</parameter> of given
        <parameter>size_b</parameter> into one contiguous chunk, operating on
        <parameter>committed</parameter>/decommitted memory as indicated, on
        behalf of arena <parameter>arena_ind</parameter>, returning false upon
        success.  If the function returns true, this indicates that the chunks
        remain distinct mappings and therefore should continue to be operated on
        independently.</para>
        </listitem>
      </varlistentry>

      <varlistentry id="arenas.narenas">
        <term>
          <mallctl>arenas.narenas</mallctl>
          (<type>unsigned</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Current limit on number of arenas.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.initialized">
        <term>
          <mallctl>arenas.initialized</mallctl>
          (<type>bool *</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>An array of <link
        linkend="arenas.narenas"><mallctl>arenas.narenas</mallctl></link>
        booleans.  Each boolean indicates whether the corresponding arena is
        initialized.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.lg_dirty_mult">
        <term>
          <mallctl>arenas.lg_dirty_mult</mallctl>
          (<type>ssize_t</type>)
          <literal>rw</literal>
        </term>
        <listitem><para>Current default per-arena minimum ratio (log base 2) of
        active to dirty pages, used to initialize <link
        linkend="arena.i.lg_dirty_mult"><mallctl>arena.&lt;i&gt;.lg_dirty_mult</mallctl></link>
        during arena creation.  See <link
        linkend="opt.lg_dirty_mult"><mallctl>opt.lg_dirty_mult</mallctl></link>
        for additional information.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.quantum">
        <term>
          <mallctl>arenas.quantum</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Quantum size.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.page">
        <term>
          <mallctl>arenas.page</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Page size.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.tcache_max">
        <term>
          <mallctl>arenas.tcache_max</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-tcache</option>]
        </term>
        <listitem><para>Maximum thread-cached size class.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.nbins">
        <term>
          <mallctl>arenas.nbins</mallctl>
          (<type>unsigned</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Number of bin size classes.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.nhbins">
        <term>
          <mallctl>arenas.nhbins</mallctl>
          (<type>unsigned</type>)
          <literal>r-</literal>
          [<option>--enable-tcache</option>]
        </term>
        <listitem><para>Total number of thread cache bin size
        classes.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.bin.i.size">
        <term>
          <mallctl>arenas.bin.&lt;i&gt;.size</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Maximum size supported by size class.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.bin.i.nregs">
        <term>
          <mallctl>arenas.bin.&lt;i&gt;.nregs</mallctl>
          (<type>uint32_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Number of regions per page run.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.bin.i.run_size">
        <term>
          <mallctl>arenas.bin.&lt;i&gt;.run_size</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Number of bytes per page run.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.nlruns">
        <term>
          <mallctl>arenas.nlruns</mallctl>
          (<type>unsigned</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Total number of large size classes.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.lrun.i.size">
        <term>
          <mallctl>arenas.lrun.&lt;i&gt;.size</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Maximum size supported by this large size
        class.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.nhchunks">
        <term>
          <mallctl>arenas.nhchunks</mallctl>
          (<type>unsigned</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Total number of huge size classes.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.hchunk.i.size">
        <term>
          <mallctl>arenas.hchunk.&lt;i&gt;.size</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Maximum size supported by this huge size
        class.</para></listitem>
      </varlistentry>

      <varlistentry id="arenas.extend">
        <term>
          <mallctl>arenas.extend</mallctl>
          (<type>unsigned</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Extend the array of arenas by appending a new arena,
        and returning the new arena index.</para></listitem>
      </varlistentry>

      <varlistentry id="prof.thread_active_init">
        <term>
          <mallctl>prof.thread_active_init</mallctl>
          (<type>bool</type>)
          <literal>rw</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Control the initial setting for <link
        linkend="thread.prof.active"><mallctl>thread.prof.active</mallctl></link>
        in newly created threads.  See the <link
        linkend="opt.prof_thread_active_init"><mallctl>opt.prof_thread_active_init</mallctl></link>
        option for additional information.</para></listitem>
      </varlistentry>

      <varlistentry id="prof.active">
        <term>
          <mallctl>prof.active</mallctl>
          (<type>bool</type>)
          <literal>rw</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Control whether sampling is currently active.  See the
        <link
        linkend="opt.prof_active"><mallctl>opt.prof_active</mallctl></link>
        option for additional information, as well as the interrelated <link
        linkend="thread.prof.active"><mallctl>thread.prof.active</mallctl></link>
        mallctl.</para></listitem>
      </varlistentry>

      <varlistentry id="prof.dump">
        <term>
          <mallctl>prof.dump</mallctl>
          (<type>const char *</type>)
          <literal>-w</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Dump a memory profile to the specified file, or if NULL
        is specified, to a file according to the pattern
        <filename>&lt;prefix&gt;.&lt;pid&gt;.&lt;seq&gt;.m&lt;mseq&gt;.heap</filename>,
        where <literal>&lt;prefix&gt;</literal> is controlled by the
        <link
        linkend="opt.prof_prefix"><mallctl>opt.prof_prefix</mallctl></link>
        option.</para></listitem>
      </varlistentry>

      <varlistentry id="prof.gdump">
        <term>
          <mallctl>prof.gdump</mallctl>
          (<type>bool</type>)
          <literal>rw</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>When enabled, trigger a memory profile dump every time
        the total virtual memory exceeds the previous maximum.  Profiles are
        dumped to files named according to the pattern
        <filename>&lt;prefix&gt;.&lt;pid&gt;.&lt;seq&gt;.u&lt;useq&gt;.heap</filename>,
        where <literal>&lt;prefix&gt;</literal> is controlled by the <link
        linkend="opt.prof_prefix"><mallctl>opt.prof_prefix</mallctl></link>
        option.</para></listitem>
      </varlistentry>

      <varlistentry id="prof.reset">
        <term>
          <mallctl>prof.reset</mallctl>
          (<type>size_t</type>)
          <literal>-w</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Reset all memory profile statistics, and optionally
        update the sample rate (see <link
        linkend="opt.lg_prof_sample"><mallctl>opt.lg_prof_sample</mallctl></link>
        and <link
        linkend="prof.lg_sample"><mallctl>prof.lg_sample</mallctl></link>).
        </para></listitem>
      </varlistentry>

      <varlistentry id="prof.lg_sample">
        <term>
          <mallctl>prof.lg_sample</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Get the current sample rate (see <link
        linkend="opt.lg_prof_sample"><mallctl>opt.lg_prof_sample</mallctl></link>).
        </para></listitem>
      </varlistentry>

      <varlistentry id="prof.interval">
        <term>
          <mallctl>prof.interval</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-prof</option>]
        </term>
        <listitem><para>Average number of bytes allocated between
        inverval-based profile dumps.  See the
        <link
        linkend="opt.lg_prof_interval"><mallctl>opt.lg_prof_interval</mallctl></link>
        option for additional information.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.cactive">
        <term>
          <mallctl>stats.cactive</mallctl>
          (<type>size_t *</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Pointer to a counter that contains an approximate count
        of the current number of bytes in active pages.  The estimate may be
        high, but never low, because each arena rounds up when computing its
        contribution to the counter.  Note that the <link
        linkend="epoch"><mallctl>epoch</mallctl></link> mallctl has no bearing
        on this counter.  Furthermore, counter consistency is maintained via
        atomic operations, so it is necessary to use an atomic operation in
        order to guarantee a consistent read when dereferencing the pointer.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.allocated">
        <term>
          <mallctl>stats.allocated</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Total number of bytes allocated by the
        application.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.active">
        <term>
          <mallctl>stats.active</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Total number of bytes in active pages allocated by the
        application.  This is a multiple of the page size, and greater than or
        equal to <link
        linkend="stats.allocated"><mallctl>stats.allocated</mallctl></link>.
        This does not include <link linkend="stats.arenas.i.pdirty">
        <mallctl>stats.arenas.&lt;i&gt;.pdirty</mallctl></link>, nor pages
        entirely devoted to allocator metadata.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.metadata">
        <term>
          <mallctl>stats.metadata</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Total number of bytes dedicated to metadata, which
        comprise base allocations used for bootstrap-sensitive internal
        allocator data structures, arena chunk headers (see <link
        linkend="stats.arenas.i.metadata.mapped"><mallctl>stats.arenas.&lt;i&gt;.metadata.mapped</mallctl></link>),
        and internal allocations (see <link
        linkend="stats.arenas.i.metadata.allocated"><mallctl>stats.arenas.&lt;i&gt;.metadata.allocated</mallctl></link>).</para></listitem>
      </varlistentry>

      <varlistentry id="stats.resident">
        <term>
          <mallctl>stats.resident</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Maximum number of bytes in physically resident data
        pages mapped by the allocator, comprising all pages dedicated to
        allocator metadata, pages backing active allocations, and unused dirty
        pages.  This is a maximum rather than precise because pages may not
        actually be physically resident if they correspond to demand-zeroed
        virtual memory that has not yet been touched.  This is a multiple of the
        page size, and is larger than <link
        linkend="stats.active"><mallctl>stats.active</mallctl></link>.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.mapped">
        <term>
          <mallctl>stats.mapped</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Total number of bytes in active chunks mapped by the
        allocator.  This is a multiple of the chunk size, and is larger than
        <link linkend="stats.active"><mallctl>stats.active</mallctl></link>.
        This does not include inactive chunks, even those that contain unused
        dirty pages, which means that there is no strict ordering between this
        and <link
        linkend="stats.resident"><mallctl>stats.resident</mallctl></link>.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.dss">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.dss</mallctl>
          (<type>const char *</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>dss (<citerefentry><refentrytitle>sbrk</refentrytitle>
        <manvolnum>2</manvolnum></citerefentry>) allocation precedence as
        related to <citerefentry><refentrytitle>mmap</refentrytitle>
        <manvolnum>2</manvolnum></citerefentry> allocation.  See <link
        linkend="opt.dss"><mallctl>opt.dss</mallctl></link> for details.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.lg_dirty_mult">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.lg_dirty_mult</mallctl>
          (<type>ssize_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Minimum ratio (log base 2) of active to dirty pages.
        See <link
        linkend="opt.lg_dirty_mult"><mallctl>opt.lg_dirty_mult</mallctl></link>
        for details.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.nthreads">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.nthreads</mallctl>
          (<type>unsigned</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Number of threads currently assigned to
        arena.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.pactive">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.pactive</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Number of pages in active runs.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.pdirty">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.pdirty</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
        </term>
        <listitem><para>Number of pages within unused runs that are potentially
        dirty, and for which <function>madvise<parameter>...</parameter>
        <parameter><constant>MADV_DONTNEED</constant></parameter></function> or
        similar has not been called.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.mapped">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.mapped</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Number of mapped bytes.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.metadata.mapped">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.metadata.mapped</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Number of mapped bytes in arena chunk headers, which
        track the states of the non-metadata pages.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.metadata.allocated">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.metadata.allocated</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Number of bytes dedicated to internal allocations.
        Internal allocations differ from application-originated allocations in
        that they are for internal use, and that they are omitted from heap
        profiles.  This statistic is reported separately from <link
        linkend="stats.metadata"><mallctl>stats.metadata</mallctl></link> and
        <link
        linkend="stats.arenas.i.metadata.mapped"><mallctl>stats.arenas.&lt;i&gt;.metadata.mapped</mallctl></link>
        because it overlaps with e.g. the <link
        linkend="stats.allocated"><mallctl>stats.allocated</mallctl></link> and
        <link linkend="stats.active"><mallctl>stats.active</mallctl></link>
        statistics, whereas the other metadata statistics do
        not.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.npurge">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.npurge</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Number of dirty page purge sweeps performed.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.nmadvise">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.nmadvise</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Number of <function>madvise<parameter>...</parameter>
        <parameter><constant>MADV_DONTNEED</constant></parameter></function> or
        similar calls made to purge dirty pages.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.purged">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.purged</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Number of pages purged.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.small.allocated">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.small.allocated</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Number of bytes currently allocated by small objects.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.small.nmalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.small.nmalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of allocation requests served by
        small bins.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.small.ndalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.small.ndalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of small objects returned to bins.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.small.nrequests">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.small.nrequests</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of small allocation requests.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.large.allocated">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.large.allocated</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Number of bytes currently allocated by large objects.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.large.nmalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.large.nmalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of large allocation requests served
        directly by the arena.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.large.ndalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.large.ndalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of large deallocation requests served
        directly by the arena.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.large.nrequests">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.large.nrequests</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of large allocation requests.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.huge.allocated">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.huge.allocated</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Number of bytes currently allocated by huge objects.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.huge.nmalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.huge.nmalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of huge allocation requests served
        directly by the arena.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.huge.ndalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.huge.ndalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of huge deallocation requests served
        directly by the arena.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.huge.nrequests">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.huge.nrequests</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of huge allocation requests.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.bins.j.nmalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.bins.&lt;j&gt;.nmalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of allocations served by bin.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.bins.j.ndalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.bins.&lt;j&gt;.ndalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of allocations returned to bin.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.bins.j.nrequests">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.bins.&lt;j&gt;.nrequests</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of allocation
        requests.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.bins.j.curregs">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.bins.&lt;j&gt;.curregs</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Current number of regions for this size
        class.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.bins.j.nfills">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.bins.&lt;j&gt;.nfills</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option> <option>--enable-tcache</option>]
        </term>
        <listitem><para>Cumulative number of tcache fills.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.bins.j.nflushes">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.bins.&lt;j&gt;.nflushes</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option> <option>--enable-tcache</option>]
        </term>
        <listitem><para>Cumulative number of tcache flushes.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.bins.j.nruns">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.bins.&lt;j&gt;.nruns</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of runs created.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.bins.j.nreruns">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.bins.&lt;j&gt;.nreruns</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of times the current run from which
        to allocate changed.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.bins.j.curruns">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.bins.&lt;j&gt;.curruns</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Current number of runs.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.lruns.j.nmalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.lruns.&lt;j&gt;.nmalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of allocation requests for this size
        class served directly by the arena.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.lruns.j.ndalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.lruns.&lt;j&gt;.ndalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of deallocation requests for this
        size class served directly by the arena.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.lruns.j.nrequests">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.lruns.&lt;j&gt;.nrequests</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of allocation requests for this size
        class.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.lruns.j.curruns">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.lruns.&lt;j&gt;.curruns</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Current number of runs for this size class.
        </para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.hchunks.j.nmalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.hchunks.&lt;j&gt;.nmalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of allocation requests for this size
        class served directly by the arena.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.hchunks.j.ndalloc">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.hchunks.&lt;j&gt;.ndalloc</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of deallocation requests for this
        size class served directly by the arena.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.hchunks.j.nrequests">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.hchunks.&lt;j&gt;.nrequests</mallctl>
          (<type>uint64_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Cumulative number of allocation requests for this size
        class.</para></listitem>
      </varlistentry>

      <varlistentry id="stats.arenas.i.hchunks.j.curhchunks">
        <term>
          <mallctl>stats.arenas.&lt;i&gt;.hchunks.&lt;j&gt;.curhchunks</mallctl>
          (<type>size_t</type>)
          <literal>r-</literal>
          [<option>--enable-stats</option>]
        </term>
        <listitem><para>Current number of huge allocations for this size class.
        </para></listitem>
      </varlistentry>
    </variablelist>
  </refsect1>
  <refsect1 id="debugging_malloc_problems">
    <title>DEBUGGING MALLOC PROBLEMS</title>
    <para>When debugging, it is a good idea to configure/build jemalloc with
    the <option>--enable-debug</option> and <option>--enable-fill</option>
    options, and recompile the program with suitable options and symbols for
    debugger support.  When so configured, jemalloc incorporates a wide variety
    of run-time assertions that catch application errors such as double-free,
    write-after-free, etc.</para>

    <para>Programs often accidentally depend on &ldquo;uninitialized&rdquo;
    memory actually being filled with zero bytes.  Junk filling
    (see the <link linkend="opt.junk"><mallctl>opt.junk</mallctl></link>
    option) tends to expose such bugs in the form of obviously incorrect
    results and/or coredumps.  Conversely, zero
    filling (see the <link
    linkend="opt.zero"><mallctl>opt.zero</mallctl></link> option) eliminates
    the symptoms of such bugs.  Between these two options, it is usually
    possible to quickly detect, diagnose, and eliminate such bugs.</para>

    <para>This implementation does not provide much detail about the problems
    it detects, because the performance impact for storing such information
    would be prohibitive.  However, jemalloc does integrate with the most
    excellent <ulink url="http://valgrind.org/">Valgrind</ulink> tool if the
    <option>--enable-valgrind</option> configuration option is enabled.</para>
  </refsect1>
  <refsect1 id="diagnostic_messages">
    <title>DIAGNOSTIC MESSAGES</title>
    <para>If any of the memory allocation/deallocation functions detect an
    error or warning condition, a message will be printed to file descriptor
    <constant>STDERR_FILENO</constant>.  Errors will result in the process
    dumping core.  If the <link
    linkend="opt.abort"><mallctl>opt.abort</mallctl></link> option is set, most
    warnings are treated as errors.</para>

    <para>The <varname>malloc_message</varname> variable allows the programmer
    to override the function which emits the text strings forming the errors
    and warnings if for some reason the <constant>STDERR_FILENO</constant> file
    descriptor is not suitable for this.
    <function>malloc_message<parameter/></function> takes the
    <parameter>cbopaque</parameter> pointer argument that is
    <constant>NULL</constant> unless overridden by the arguments in a call to
    <function>malloc_stats_print<parameter/></function>, followed by a string
    pointer.  Please note that doing anything which tries to allocate memory in
    this function is likely to result in a crash or deadlock.</para>

    <para>All messages are prefixed by
    &ldquo;<computeroutput>&lt;jemalloc&gt;: </computeroutput>&rdquo;.</para>
  </refsect1>
  <refsect1 id="return_values">
    <title>RETURN VALUES</title>
    <refsect2>
      <title>Standard API</title>
      <para>The <function>malloc<parameter/></function> and
      <function>calloc<parameter/></function> functions return a pointer to the
      allocated memory if successful; otherwise a <constant>NULL</constant>
      pointer is returned and <varname>errno</varname> is set to
      <errorname>ENOMEM</errorname>.</para>

      <para>The <function>posix_memalign<parameter/></function> function
      returns the value 0 if successful; otherwise it returns an error value.
      The <function>posix_memalign<parameter/></function> function will fail
      if:
        <variablelist>
          <varlistentry>
            <term><errorname>EINVAL</errorname></term>

            <listitem><para>The <parameter>alignment</parameter> parameter is
            not a power of 2 at least as large as
            <code language="C">sizeof(<type>void *</type>)</code>.
            </para></listitem>
          </varlistentry>
          <varlistentry>
            <term><errorname>ENOMEM</errorname></term>

            <listitem><para>Memory allocation error.</para></listitem>
          </varlistentry>
        </variablelist>
      </para>

      <para>The <function>aligned_alloc<parameter/></function> function returns
      a pointer to the allocated memory if successful; otherwise a
      <constant>NULL</constant> pointer is returned and
      <varname>errno</varname> is set.  The
      <function>aligned_alloc<parameter/></function> function will fail if:
        <variablelist>
          <varlistentry>
            <term><errorname>EINVAL</errorname></term>

            <listitem><para>The <parameter>alignment</parameter> parameter is
            not a power of 2.
            </para></listitem>
          </varlistentry>
          <varlistentry>
            <term><errorname>ENOMEM</errorname></term>

            <listitem><para>Memory allocation error.</para></listitem>
          </varlistentry>
        </variablelist>
      </para>

      <para>The <function>realloc<parameter/></function> function returns a
      pointer, possibly identical to <parameter>ptr</parameter>, to the
      allocated memory if successful; otherwise a <constant>NULL</constant>
      pointer is returned, and <varname>errno</varname> is set to
      <errorname>ENOMEM</errorname> if the error was the result of an
      allocation failure.  The <function>realloc<parameter/></function>
      function always leaves the original buffer intact when an error occurs.
      </para>

      <para>The <function>free<parameter/></function> function returns no
      value.</para>
    </refsect2>
    <refsect2>
      <title>Non-standard API</title>
      <para>The <function>mallocx<parameter/></function> and
      <function>rallocx<parameter/></function> functions return a pointer to
      the allocated memory if successful; otherwise a <constant>NULL</constant>
      pointer is returned to indicate insufficient contiguous memory was
      available to service the allocation request.  </para>

      <para>The <function>xallocx<parameter/></function> function returns the
      real size of the resulting resized allocation pointed to by
      <parameter>ptr</parameter>, which is a value less than
      <parameter>size</parameter> if the allocation could not be adequately
      grown in place.  </para>

      <para>The <function>sallocx<parameter/></function> function returns the
      real size of the allocation pointed to by <parameter>ptr</parameter>.
      </para>

      <para>The <function>nallocx<parameter/></function> returns the real size
      that would result from a successful equivalent
      <function>mallocx<parameter/></function> function call, or zero if
      insufficient memory is available to perform the size computation.  </para>

      <para>The <function>mallctl<parameter/></function>,
      <function>mallctlnametomib<parameter/></function>, and
      <function>mallctlbymib<parameter/></function> functions return 0 on
      success; otherwise they return an error value.  The functions will fail
      if:
        <variablelist>
          <varlistentry>
            <term><errorname>EINVAL</errorname></term>

            <listitem><para><parameter>newp</parameter> is not
            <constant>NULL</constant>, and <parameter>newlen</parameter> is too
            large or too small.  Alternatively, <parameter>*oldlenp</parameter>
            is too large or too small; in this case as much data as possible
            are read despite the error.</para></listitem>
          </varlistentry>
          <varlistentry>
            <term><errorname>ENOENT</errorname></term>

            <listitem><para><parameter>name</parameter> or
            <parameter>mib</parameter> specifies an unknown/invalid
            value.</para></listitem>
          </varlistentry>
          <varlistentry>
            <term><errorname>EPERM</errorname></term>

            <listitem><para>Attempt to read or write void value, or attempt to
            write read-only value.</para></listitem>
          </varlistentry>
          <varlistentry>
            <term><errorname>EAGAIN</errorname></term>

            <listitem><para>A memory allocation failure
            occurred.</para></listitem>
          </varlistentry>
          <varlistentry>
            <term><errorname>EFAULT</errorname></term>

            <listitem><para>An interface with side effects failed in some way
            not directly related to <function>mallctl*<parameter/></function>
            read/write processing.</para></listitem>
          </varlistentry>
        </variablelist>
      </para>

      <para>The <function>malloc_usable_size<parameter/></function> function
      returns the usable size of the allocation pointed to by
      <parameter>ptr</parameter>.  </para>
    </refsect2>
  </refsect1>
  <refsect1 id="environment">
    <title>ENVIRONMENT</title>
    <para>The following environment variable affects the execution of the
    allocation functions:
      <variablelist>
        <varlistentry>
          <term><envar>MALLOC_CONF</envar></term>

          <listitem><para>If the environment variable
          <envar>MALLOC_CONF</envar> is set, the characters it contains
          will be interpreted as options.</para></listitem>
        </varlistentry>
      </variablelist>
    </para>
  </refsect1>
  <refsect1 id="examples">
    <title>EXAMPLES</title>
    <para>To dump core whenever a problem occurs:
      <screen>ln -s 'abort:true' /etc/malloc.conf</screen>
    </para>
    <para>To specify in the source a chunk size that is 16 MiB:
      <programlisting language="C"><![CDATA[
malloc_conf = "lg_chunk:24";]]></programlisting></para>
  </refsect1>
  <refsect1 id="see_also">
    <title>SEE ALSO</title>
    <para><citerefentry><refentrytitle>madvise</refentrytitle>
    <manvolnum>2</manvolnum></citerefentry>,
    <citerefentry><refentrytitle>mmap</refentrytitle>
    <manvolnum>2</manvolnum></citerefentry>,
    <citerefentry><refentrytitle>sbrk</refentrytitle>
    <manvolnum>2</manvolnum></citerefentry>,
    <citerefentry><refentrytitle>utrace</refentrytitle>
    <manvolnum>2</manvolnum></citerefentry>,
    <citerefentry><refentrytitle>alloca</refentrytitle>
    <manvolnum>3</manvolnum></citerefentry>,
    <citerefentry><refentrytitle>atexit</refentrytitle>
    <manvolnum>3</manvolnum></citerefentry>,
    <citerefentry><refentrytitle>getpagesize</refentrytitle>
    <manvolnum>3</manvolnum></citerefentry></para>
  </refsect1>
  <refsect1 id="standards">
    <title>STANDARDS</title>
    <para>The <function>malloc<parameter/></function>,
    <function>calloc<parameter/></function>,
    <function>realloc<parameter/></function>, and
    <function>free<parameter/></function> functions conform to ISO/IEC
    9899:1990 (&ldquo;ISO C90&rdquo;).</para>

    <para>The <function>posix_memalign<parameter/></function> function conforms
    to IEEE Std 1003.1-2001 (&ldquo;POSIX.1&rdquo;).</para>
  </refsect1>
</refentry>
