'\" t
.\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.TH MALLOPT 3  2017-09-15 "Linux" "Linux Programmer's Manual"
.SH NAME
mallopt \- set memory allocation parameters
.SH SYNOPSIS
.B #include <malloc.h>
.PP
.BI "int mallopt(int " param ", int " value );
.SH DESCRIPTION
The
.BR mallopt ()
function adjusts parameters that control the behavior of the
memory-allocation functions (see
.BR malloc (3)).
The
.IR param
argument specifies the parameter to be modified, and
.I value
specifies the new value for that parameter.
.PP
The following values can be specified for
.IR param :
.TP
.BR M_ARENA_MAX
If this parameter has a nonzero value,
it defines a hard limit on the maximum number of arenas that can be created.
An arena represents a pool of memory that can be used by
.BR malloc (3)
(and similar) calls to service allocation requests.
Arenas are thread safe and
therefore may have multiple concurrent memory requests.
The trade-off is between the number of threads and the number of arenas.
The more arenas you have, the lower the per-thread contention,
but the higher the memory usage.
.IP
The default value of this parameter is 0,
meaning that the limit on the number of arenas is determined
according to the setting of
.BR M_ARENA_TEST .
.IP
This parameter has been available since glibc 2.10 via
.BR \-\-enable\-experimental\-malloc ,
and since glibc 2.15 by default.
In some versions of the allocator there was no limit on the number
of created arenas (e.g., CentOS 5, RHEL 5).
.IP
When employing newer glibc versions, applications may in
some cases exhibit high contention when accessing arenas.
In these cases, it may be beneficial to increase
.B M_ARENA_MAX
to match the number of threads.
This is similar in behavior to strategies taken by tcmalloc and jemalloc
(e.g., per-thread allocation pools).
.TP
.BR M_ARENA_TEST
This parameter specifies a value, in number of arenas created,
at which point the system configuration will be examined
to determine a hard limit on the number of created arenas.
(See
.B M_ARENA_MAX
for the definition of an arena.)
.IP
The computation of the arena hard limit is implementation-defined
and is usually calculated as a multiple of the number of available CPUs.
Once the hard limit is computed, the result is final and constrains
the total number of arenas.
.IP
The default value for the
.B M_ARENA_TEST
parameter is 2 on systems where
.IR sizeof(long)
is 4; otherwise the default value is 8.
.IP
This parameter has been available since glibc 2.10 via
.BR \-\-enable\-experimental\-malloc ,
and since glibc 2.15 by default.
.IP
The value of
.B M_ARENA_TEST
is not used when
.B M_ARENA_MAX
has a nonzero value.
.TP
.BR M_CHECK_ACTION
Setting this parameter controls how glibc responds when various kinds
of programming errors are detected (e.g., freeing the same pointer twice).
The 3 least significant bits (2, 1, and 0) of the value assigned
to this parameter determine the glibc behavior, as follows:
.RS
.TP
Bit 0
If this bit is set, then print a one-line message on
.I stderr
that provides details about the error.
The message starts with the string "***\ glibc detected\ ***",
followed by the program name,
the name of the memory-allocation function in which the error was detected,
a brief description of the error,
and the memory address where the error was detected.
.TP
Bit 1
If this bit is set, then,
after printing any error message specified by bit 0,
the program is terminated by calling
.BR abort (3).
In glibc versions since 2.4,
if bit 0 is also set,
then, between printing the error message and aborting,
the program also prints a stack trace in the manner of
.BR backtrace (3),
and prints the process's memory mapping in the style of
.IR /proc/[pid]/maps
(see
.BR proc (5)).
.TP
Bit 2 (since glibc 2.4)
This bit has an effect only if bit 0 is also set.
If this bit is set,
then the one-line message describing the error is simplified
to contain just the name of the function where the error
was detected and the brief description of the error.
.RE
.IP
The remaining bits in
.I value
are ignored.
.IP
Combining the above details,
the following numeric values are meaningful for
.BR M_CHECK_ACTION :
.RS 12
.IP 0 3
Ignore error conditions; continue execution (with undefined results).
.IP 1
Print a detailed error message and continue execution.
.IP 2
Abort the program.
.IP 3
Print detailed error message, stack trace, and memory mappings,
and abort the program.
.IP 5
Print a simple error message and continue execution.
.IP 7
Print simple error message, stack trace, and memory mappings,
and abort the program.
.RE
.IP
Since glibc 2.3.4, the default value for the
.BR M_CHECK_ACTION
parameter is 3.
In glibc version 2.3.3 and earlier, the default value is 1.
.IP
Using a nonzero
.B M_CHECK_ACTION
value can be useful because otherwise a crash may happen much later,
and the true cause of the problem is then very hard to track down.
.TP
.BR M_MMAP_MAX
.\" The following text adapted from comments in the glibc source:
This parameter specifies the maximum number of allocation requests that
may be simultaneously serviced using
.BR mmap (2).
This parameter exists because some systems have a limited number
of internal tables for use by
.BR mmap (2),
and using more than a few of them may degrade performance.
.IP
The default value is 65,536,
a value which has no special significance and
which serves only as a safeguard.
Setting this parameter to 0 disables the use of
.BR mmap (2)
for servicing large allocation requests.
.TP
.BR M_MMAP_THRESHOLD
For allocations greater than or equal to the limit specified (in bytes) by
.BR M_MMAP_THRESHOLD
that can't be satisfied from the free list,
the memory-allocation functions employ
.BR mmap (2)
instead of increasing the program break using
.BR sbrk (2).
.IP
Allocating memory using
.BR mmap (2)
has the significant advantage that the allocated memory blocks
can always be independently released back to the system.
(By contrast,
the heap can be trimmed only if memory is freed at the top end.)
On the other hand, there are some disadvantages to the use of
.BR mmap (2):
deallocated space is not placed on the free list
for reuse by later allocations;
memory may be wasted because
.BR mmap (2)
allocations must be page-aligned;
and the kernel must perform the expensive task of zeroing out
memory allocated via
.BR mmap (2).
Balancing these factors leads to a default setting of 128*1024 for the
.BR M_MMAP_THRESHOLD
parameter.
.IP
The lower limit for this parameter is 0.
The upper limit is
.BR DEFAULT_MMAP_THRESHOLD_MAX :
512*1024 on 32-bit systems or
.IR 4*1024*1024*sizeof(long)
on 64-bit systems.
.IP
.IR Note:
Nowadays, glibc uses a dynamic mmap threshold by default.
The initial value of the threshold is 128*1024,
but when blocks larger than the current threshold and less than or equal to
.BR DEFAULT_MMAP_THRESHOLD_MAX
are freed,
the threshold is adjusted upward to the size of the freed block.
When dynamic mmap thresholding is in effect,
the threshold for trimming the heap is also dynamically adjusted
to be twice the dynamic mmap threshold.
Dynamic adjustment of the mmap threshold is disabled if any of the
.BR M_TRIM_THRESHOLD ,
.BR M_TOP_PAD ,
.BR M_MMAP_THRESHOLD ,
or
.BR M_MMAP_MAX
parameters is set.
.TP
.BR M_MXFAST " (since glibc 2.3)"
.\" The following text adapted from comments in the glibc sources:
Set the upper limit for memory allocation requests that are satisfied
using "fastbins".
(The measurement unit for this parameter is bytes.)
Fastbins are storage areas that hold deallocated blocks of memory
of the same size without merging adjacent free blocks.
Subsequent reallocation of blocks of the same size can be handled
very quickly by allocating from the fastbin,
although memory fragmentation and the overall memory footprint
of the program can increase.
.IP
The default value for this parameter is
.IR "64*sizeof(size_t)/4"
(i.e., 64 on 32-bit architectures).
The range for this parameter is 0 to
.IR "80*sizeof(size_t)/4" .
Setting
.B M_MXFAST
to 0 disables the use of fastbins.
.TP
.BR M_PERTURB " (since glibc 2.4)"
If this parameter is set to a nonzero value,
then bytes of allocated memory (other than allocations via
.BR calloc (3))
are initialized to the complement of the value
in the least significant byte of
.IR value ,
and when allocated memory is released using
.BR free (3),
the freed bytes are set to the least significant byte of
.IR value .
This can be useful for detecting errors where programs
incorrectly rely on allocated memory being initialized to zero,
or reuse values in memory that has already been freed.
.IP
The default value for this parameter is 0.
.TP
.BR M_TOP_PAD
This parameter defines the amount of padding to employ when calling
.BR sbrk (2)
to modify the program break.
(The measurement unit for this parameter is bytes.)
This parameter has an effect in the following circumstances:
.RS
.IP * 3
When the program break is increased, then
.BR M_TOP_PAD
bytes are added to the
.BR sbrk (2)
request.
.IP *
When the heap is trimmed as a consequence of calling
.BR free (3)
(see the discussion of
.BR M_TRIM_THRESHOLD )
this much free space is preserved at the top of the heap.
.RE
.IP
In either case,
the amount of padding is always rounded to a system page boundary.
.IP
Modifying
.BR M_TOP_PAD
is a trade-off between increasing the number of system calls
(when the parameter is set low)
and wasting unused memory at the top of the heap
(when the parameter is set high).
.IP
The default value for this parameter is 128*1024.
.\" DEFAULT_TOP_PAD in glibc source
.TP
.BR M_TRIM_THRESHOLD
When the amount of contiguous free memory at the top of the heap
grows sufficiently large,
.BR free (3)
employs
.BR sbrk (2)
to release this memory back to the system.
(This can be useful in programs that continue to execute for
a long period after freeing a significant amount of memory.)
The
.BR M_TRIM_THRESHOLD
parameter specifies the minimum size (in bytes) that
this block of memory must reach before
.BR sbrk (2)
is used to trim the heap.
.IP
The default value for this parameter is 128*1024.
Setting
.BR M_TRIM_THRESHOLD
to \-1 disables trimming completely.
.IP
Modifying
.BR M_TRIM_THRESHOLD
is a trade-off between increasing the number of system calls
(when the parameter is set low)
and wasting unused memory at the top of the heap
(when the parameter is set high).
.\"
.SS Environment variables
A number of environment variables can be defined
to modify some of the same parameters as are controlled by
.BR mallopt ().
Using these variables has the advantage that the source code
of the program need not be changed.
To be effective, these variables must be defined before the
first call to a memory-allocation function.
(If the same parameters are adjusted via
.BR mallopt (),
then the
.BR mallopt ()
settings take precedence.)
For security reasons,
these variables are ignored in set-user-ID and set-group-ID programs.
.PP
The environment variables are as follows
(note the trailing underscore at the end of the name of some variables):
.TP
.BR MALLOC_ARENA_MAX
Controls the same parameter as
.BR mallopt ()
.BR M_ARENA_MAX .
.TP
.BR MALLOC_ARENA_TEST
Controls the same parameter as
.BR mallopt ()
.BR M_ARENA_TEST .
.TP
.BR MALLOC_CHECK_
This environment variable controls the same parameter as
.BR mallopt ()
.BR M_CHECK_ACTION .
If this variable is set to a nonzero value,
then a special implementation of the memory-allocation functions is used.
(This is accomplished using the
.BR malloc_hook (3)
feature.)
This implementation performs additional error checking,
but is slower
.\" On glibc 2.12/x86, a simple malloc()+free() loop is about 70% slower
.\" when MALLOC_CHECK_ was set.
than the standard set of memory-allocation functions.
(This implementation does not detect all possible errors;
memory leaks can still occur.)
.IP
The value assigned to this environment variable should be a single digit,
whose meaning is as described for
.BR M_CHECK_ACTION .
Any characters beyond the initial digit are ignored.
.IP
For security reasons, the effect of
.BR MALLOC_CHECK_
is disabled by default for set-user-ID and set-group-ID programs.
However, if the file
.IR /etc/suid\-debug
exists (the content of the file is irrelevant), then
.BR MALLOC_CHECK_
also has an effect for set-user-ID and set-group-ID programs.
.TP
.BR MALLOC_MMAP_MAX_
Controls the same parameter as
.BR mallopt ()
.BR M_MMAP_MAX .
.TP
.BR MALLOC_MMAP_THRESHOLD_
Controls the same parameter as
.BR mallopt ()
.BR M_MMAP_THRESHOLD .
.TP
.BR MALLOC_PERTURB_
Controls the same parameter as
.BR mallopt ()
.BR M_PERTURB .
.TP
.BR MALLOC_TRIM_THRESHOLD_
Controls the same parameter as
.BR mallopt ()
.BR M_TRIM_THRESHOLD .
.TP
.BR MALLOC_TOP_PAD_
Controls the same parameter as
.BR mallopt ()
.BR M_TOP_PAD .
.SH RETURN VALUE
On success,
.BR mallopt ()
returns 1.
On error, it returns 0.
.SH ERRORS
On error,
.I errno
is
.I not
set.
.\" .SH VERSIONS
.\" Available already in glibc 2.0, possibly earlier
.SH CONFORMING TO
This function is not specified by POSIX or the C standards.
A similar function exists on many System V derivatives,
but the range of values for
.IR param
varies across systems.
The SVID defined options
.BR M_MXFAST ,
.BR M_NLBLKS ,
.BR M_GRAIN ,
and
.BR M_KEEP ,
but only the first of these is implemented in glibc.
.\" .SH NOTES
.SH BUGS
Specifying an invalid value for
.I param
does not generate an error.
.PP
A calculation error within the glibc implementation means that
a call of the form:
.\" FIXME . This looks buggy:
.\" setting the M_MXFAST limit rounds up:    (s + SIZE_SZ) & ~MALLOC_ALIGN_MASK)
.\" malloc requests are rounded up:
.\"    (req) + SIZE_SZ + MALLOC_ALIGN_MASK) & ~MALLOC_ALIGN_MASK
.\" http://sources.redhat.com/bugzilla/show_bug.cgi?id=12129
.PP
.in +4n
.EX
mallopt(M_MXFAST, n)
.EE
.in
.PP
does not result in fastbins being employed for all allocations of size up to
.IR n .
To ensure desired results,
.I n
should be rounded up to the next multiple greater than or equal to
.IR (2k+1)*sizeof(size_t) ,
where
.I k
is an integer.
.\" Bins are multiples of 2 * sizeof(size_t) + sizeof(size_t)
.PP
If
.BR mallopt ()
is used to set
.BR M_PERTURB ,
then, as expected, the bytes of allocated memory are initialized
to the complement of the byte in
.IR value ,
and when that memory is freed,
the bytes of the region are initialized to the byte specified in
.IR value .
However, there is an
.RI off-by- sizeof(size_t)
error in the implementation:
.\" FIXME . http://sources.redhat.com/bugzilla/show_bug.cgi?id=12140
instead of initializing precisely the block of memory
being freed by the call
.IR free(p) ,
the block starting at
.I p+sizeof(size_t)
is initialized.
.SH EXAMPLE
The program below demonstrates the use of
.BR M_CHECK_ACTION .
If the program is supplied with an (integer) command-line argument,
then that argument is used to set the
.BR M_CHECK_ACTION
parameter.
The program then allocates a block of memory,
and frees it twice (an error).
.PP
The following shell session shows what happens when we run this program
under glibc, with the default value for
.BR M_CHECK_ACTION :
.PP
.in +4n
.EX
$ \fB./a.out\fP
main(): returned from first free() call
*** glibc detected *** ./a.out: double free or corruption (top): 0x09d30008 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6c501)[0x523501]
/lib/libc.so.6(+0x6dd70)[0x524d70]
/lib/libc.so.6(cfree+0x6d)[0x527e5d]
\&./a.out[0x80485db]
/lib/libc.so.6(__libc_start_main+0xe7)[0x4cdce7]
\&./a.out[0x8048471]
======= Memory map: ========
001e4000\-001fe000 r\-xp 00000000 08:06 1083555    /lib/libgcc_s.so.1
001fe000\-001ff000 r\-\-p 00019000 08:06 1083555    /lib/libgcc_s.so.1
[some lines omitted]
b7814000\-b7817000 rw\-p 00000000 00:00 0
bff53000\-bff74000 rw\-p 00000000 00:00 0          [stack]
Aborted (core dumped)
.EE
.in
.PP
The following runs show the results when employing other values for
.BR M_CHECK_ACTION :
.PP
.in +4n
.EX
$ \fB./a.out 1\fP             # Diagnose error and continue
main(): returned from first free() call
*** glibc detected *** ./a.out: double free or corruption (top): 0x09cbe008 ***
main(): returned from second free() call
$ \fB./a.out 2\fP             # Abort without error message
main(): returned from first free() call
Aborted (core dumped)
$ \fB./a.out 0\fP             # Ignore error and continue
main(): returned from first free() call
main(): returned from second free() call
.EE
.in
.PP
The next run shows how to set the same parameter using the
.B MALLOC_CHECK_
environment variable:
.PP
.in +4n
.EX
$ \fBMALLOC_CHECK_=1 ./a.out\fP
main(): returned from first free() call
*** glibc detected *** ./a.out: free(): invalid pointer: 0x092c2008 ***
main(): returned from second free() call
.EE
.in
.SS Program source
\&
.EX
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char *argv[])
{
    char *p;

    if (argc > 1) {
        if (mallopt(M_CHECK_ACTION, atoi(argv[1])) != 1) {
            fprintf(stderr, "mallopt() failed");
            exit(EXIT_FAILURE);
        }
    }

    p = malloc(1000);
    if (p == NULL) {
        fprintf(stderr, "malloc() failed");
        exit(EXIT_FAILURE);
    }

    free(p);
    printf("main(): returned from first free() call\\n");

    free(p);
    printf("main(): returned from second free() call\\n");

    exit(EXIT_SUCCESS);
}
.EE
.SH SEE ALSO
.ad l
.nh
.BR mmap (2),
.BR sbrk (2),
.BR mallinfo (3),
.BR malloc (3),
.BR malloc_hook (3),
.BR malloc_info (3),
.BR malloc_stats (3),
.BR malloc_trim (3),
.BR mcheck (3),
.BR mtrace (3),
.BR posix_memalign (3)
