|
@ -1,3 +1,4 @@ |
|
|
|
|
|
.\" |
|
|
.\" Copyright (c) 1980, 1991, 1993 |
|
|
.\" Copyright (c) 1980, 1991, 1993 |
|
|
.\" The Regents of the University of California. All rights reserved. |
|
|
.\" The Regents of the University of California. All rights reserved. |
|
|
.\" |
|
|
.\" |
|
@ -33,7 +34,7 @@ |
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
|
.\" SUCH DAMAGE. |
|
|
.\" SUCH DAMAGE. |
|
|
.\" |
|
|
.\" |
|
|
.\" $OpenBSD: malloc.3,v 1.18 2000/01/19 05:36:38 pjanzen Exp $ |
|
|
|
|
|
|
|
|
.\" $OpenBSD: malloc.3,v 1.19 2000/04/20 02:14:26 aaron Exp $ |
|
|
.\" |
|
|
.\" |
|
|
.Dd August 27, 1996 |
|
|
.Dd August 27, 1996 |
|
|
.Dt MALLOC 3 |
|
|
.Dt MALLOC 3 |
|
@ -72,7 +73,8 @@ space from the appropriate list. |
|
|
.Pp |
|
|
.Pp |
|
|
The allocated space is |
|
|
The allocated space is |
|
|
suitably aligned (after possible pointer |
|
|
suitably aligned (after possible pointer |
|
|
coercion) for storage of any type of object. If the space is of |
|
|
|
|
|
|
|
|
coercion) for storage of any type of object. |
|
|
|
|
|
If the space is of |
|
|
.Em pagesize |
|
|
.Em pagesize |
|
|
or larger, the memory returned will be page-aligned. |
|
|
or larger, the memory returned will be page-aligned. |
|
|
.Pp |
|
|
.Pp |
|
@ -166,43 +168,54 @@ and finally for the global variable |
|
|
and scan them for flags in that order. |
|
|
and scan them for flags in that order. |
|
|
Flags are single letters, uppercase means on, lowercase means off. |
|
|
Flags are single letters, uppercase means on, lowercase means off. |
|
|
.Bl -tag -width indent |
|
|
.Bl -tag -width indent |
|
|
.It A |
|
|
|
|
|
``abort'' malloc will coredump the process, rather than tolerate failure. |
|
|
|
|
|
|
|
|
.It Cm A |
|
|
|
|
|
.Dq Abort . |
|
|
|
|
|
.Fn malloc |
|
|
|
|
|
will coredump the process, rather than tolerate failure. |
|
|
This is a very handy debugging aid, since the core file will represent the |
|
|
This is a very handy debugging aid, since the core file will represent the |
|
|
time of failure, |
|
|
|
|
|
rather than when the null pointer was accessed. |
|
|
|
|
|
|
|
|
time of failure, rather than when the null pointer was accessed. |
|
|
.Pp |
|
|
.Pp |
|
|
.It D |
|
|
|
|
|
``dump'' malloc will dump statistics in a file called ``malloc.out'' at exit. |
|
|
|
|
|
|
|
|
.It Cm D |
|
|
|
|
|
.Dq Dump . |
|
|
|
|
|
.Fn malloc |
|
|
|
|
|
will dump statistics in a file called |
|
|
|
|
|
.Pa malloc.out |
|
|
|
|
|
at exit. |
|
|
This option requires the library to have been compiled with -DMALLOC_STATS in |
|
|
This option requires the library to have been compiled with -DMALLOC_STATS in |
|
|
order to have any effect. |
|
|
order to have any effect. |
|
|
.Pp |
|
|
.Pp |
|
|
.It J |
|
|
|
|
|
``junk'' fill some junk into the area allocated. |
|
|
|
|
|
Currently junk is bytes of 0xd0, this is pronounced ``Duh'' :-) |
|
|
|
|
|
|
|
|
.It Cm J |
|
|
|
|
|
.Dq Junk . |
|
|
|
|
|
Fill some junk into the area allocated. |
|
|
|
|
|
Currently junk is bytes of 0xd0; this is pronounced |
|
|
|
|
|
.Dq Duh . |
|
|
|
|
|
\&:-) |
|
|
.Pp |
|
|
.Pp |
|
|
.It H |
|
|
|
|
|
``hint'' pass a hint to the kernel about pages we don't use. If the |
|
|
|
|
|
machine is paging a lot this may help a bit. |
|
|
|
|
|
|
|
|
.It Cm H |
|
|
|
|
|
.Dq Hint . |
|
|
|
|
|
Pass a hint to the kernel about pages we don't use. |
|
|
|
|
|
If the machine is paging a lot this may help a bit. |
|
|
.Pp |
|
|
.Pp |
|
|
.It N |
|
|
|
|
|
|
|
|
.It Cm N |
|
|
Do not output warning messages when encountering possible corruption |
|
|
Do not output warning messages when encountering possible corruption |
|
|
or bad pointers. |
|
|
or bad pointers. |
|
|
.Pp |
|
|
.Pp |
|
|
.It R |
|
|
|
|
|
``realloc'' always reallocate when |
|
|
|
|
|
|
|
|
.It Cm R |
|
|
|
|
|
.Dq realloc . |
|
|
|
|
|
Always reallocate when |
|
|
.Fn realloc |
|
|
.Fn realloc |
|
|
is called, even if the initial allocation was big enough. |
|
|
is called, even if the initial allocation was big enough. |
|
|
This can substantially aid in compacting memory. |
|
|
This can substantially aid in compacting memory. |
|
|
.Pp |
|
|
.Pp |
|
|
.It U |
|
|
|
|
|
``utrace'' generate entries for |
|
|
|
|
|
|
|
|
.It Cm U |
|
|
|
|
|
.Dq utrace . |
|
|
|
|
|
Generate entries for |
|
|
.Xr ktrace 1 |
|
|
.Xr ktrace 1 |
|
|
for all operations. |
|
|
for all operations. |
|
|
Consult the source for this one. |
|
|
Consult the source for this one. |
|
|
.Pp |
|
|
.Pp |
|
|
.It X |
|
|
|
|
|
``xmalloc'' |
|
|
|
|
|
|
|
|
.It Cm X |
|
|
|
|
|
.Dq xmalloc . |
|
|
rather than return failure, |
|
|
rather than return failure, |
|
|
.Xr abort 3 |
|
|
.Xr abort 3 |
|
|
the program with a diagnostic message on stderr. |
|
|
the program with a diagnostic message on stderr. |
|
@ -213,23 +226,31 @@ extern char *malloc_options; |
|
|
malloc_options = "X"; |
|
|
malloc_options = "X"; |
|
|
.Ed |
|
|
.Ed |
|
|
.Pp |
|
|
.Pp |
|
|
.It Z |
|
|
|
|
|
``zero'' fill some junk into the area allocated (see ``J''), |
|
|
|
|
|
|
|
|
.It Cm Z |
|
|
|
|
|
.Dq Zero . |
|
|
|
|
|
Fill some junk into the area allocated (see |
|
|
|
|
|
.Cm J ) , |
|
|
except for the exact length the user asked for, which is zeroed. |
|
|
except for the exact length the user asked for, which is zeroed. |
|
|
.Pp |
|
|
.Pp |
|
|
.It < |
|
|
|
|
|
``Half the cache size'' Reduce the size of the cache by a factor of two. |
|
|
|
|
|
|
|
|
.It Cm < |
|
|
|
|
|
.Dq Half the cache size . |
|
|
|
|
|
Reduce the size of the cache by a factor of two. |
|
|
.Pp |
|
|
.Pp |
|
|
.It > |
|
|
|
|
|
``Double the cache size'' Double the size of the cache by a factor of two. |
|
|
|
|
|
|
|
|
.It Cm > |
|
|
|
|
|
.Dq Double the cache size . |
|
|
|
|
|
Double the size of the cache by a factor of two. |
|
|
.El |
|
|
.El |
|
|
.Pp |
|
|
.Pp |
|
|
So to set a systemwide reduction of cache size and coredumps on problems |
|
|
So to set a systemwide reduction of cache size and coredumps on problems |
|
|
one would: |
|
|
one would: |
|
|
.Li ln -s 'A<' /etc/malloc.conf |
|
|
.Li ln -s 'A<' /etc/malloc.conf |
|
|
.Pp |
|
|
.Pp |
|
|
The ``J'' and ``Z'' is mostly for testing and debugging, |
|
|
|
|
|
if a program changes behavior if either of these options are used, |
|
|
|
|
|
|
|
|
The |
|
|
|
|
|
.Cm J |
|
|
|
|
|
and |
|
|
|
|
|
.Cm Z |
|
|
|
|
|
is mostly for testing and debugging. |
|
|
|
|
|
If a program changes behavior if either of these options are used, |
|
|
it is buggy. |
|
|
it is buggy. |
|
|
.Pp |
|
|
.Pp |
|
|
The default cache size is 16 pages. |
|
|
The default cache size is 16 pages. |
|
@ -240,8 +261,7 @@ The |
|
|
.Fn malloc |
|
|
.Fn malloc |
|
|
and |
|
|
and |
|
|
.Fn calloc |
|
|
.Fn calloc |
|
|
functions return |
|
|
|
|
|
a pointer to the allocated space if successful; otherwise, |
|
|
|
|
|
|
|
|
functions return a pointer to the allocated space if successful; otherwise, |
|
|
a null pointer is returned and |
|
|
a null pointer is returned and |
|
|
.Va errno |
|
|
.Va errno |
|
|
is set to |
|
|
is set to |
|
@ -260,11 +280,11 @@ if successful; otherwise, a null pointer is returned and |
|
|
.Va errno |
|
|
.Va errno |
|
|
is set to |
|
|
is set to |
|
|
.Er ENOMEM . |
|
|
.Er ENOMEM . |
|
|
.Sh MESSAGES |
|
|
|
|
|
|
|
|
.Sh DIAGNOSTICS |
|
|
If |
|
|
If |
|
|
.Fn malloc , |
|
|
.Fn malloc , |
|
|
.Fn calloc , |
|
|
.Fn calloc , |
|
|
.Fn realloc |
|
|
|
|
|
|
|
|
.Fn realloc , |
|
|
or |
|
|
or |
|
|
.Fn free |
|
|
.Fn free |
|
|
detect an error or warning condition, |
|
|
detect an error or warning condition, |
|
@ -272,77 +292,84 @@ a message will be printed to file descriptor |
|
|
2 (not using stdio). |
|
|
2 (not using stdio). |
|
|
Errors will always result in the process being |
|
|
Errors will always result in the process being |
|
|
.Xr abort 3 'ed. |
|
|
.Xr abort 3 'ed. |
|
|
If the ``A'' option has been specified, warnings will also |
|
|
|
|
|
|
|
|
If the |
|
|
|
|
|
.Cm A |
|
|
|
|
|
option has been specified, warnings will also |
|
|
.Xr abort 3 |
|
|
.Xr abort 3 |
|
|
the process. |
|
|
the process. |
|
|
.Pp |
|
|
.Pp |
|
|
Here is a brief description of the error messages and what they mean: |
|
|
Here is a brief description of the error messages and what they mean: |
|
|
.Pp |
|
|
|
|
|
``(ES): mumble mumble mumble'': |
|
|
|
|
|
malloc have been compiled with -DEXTRA_SANITY and something looks |
|
|
|
|
|
fishy in there. Consult sources and or wizards. |
|
|
|
|
|
.Pp |
|
|
|
|
|
``allocation failed'' |
|
|
|
|
|
if the ``A'' option is specified it is an error for |
|
|
|
|
|
|
|
|
.Bl -tag -width Fl |
|
|
|
|
|
.It Dq (ES): mumble mumble mumble |
|
|
|
|
|
.Fn malloc |
|
|
|
|
|
has been compiled with |
|
|
|
|
|
.Dv \&-DEXTRA_SANITY |
|
|
|
|
|
and something looks fishy in there. |
|
|
|
|
|
Consult sources and/or wizards. |
|
|
|
|
|
.It Dq allocation failed |
|
|
|
|
|
If the |
|
|
|
|
|
.Cm A |
|
|
|
|
|
option is specified it is an error for |
|
|
.Fn malloc , |
|
|
.Fn malloc , |
|
|
.Fn calloc |
|
|
|
|
|
|
|
|
.Fn calloc , |
|
|
or |
|
|
or |
|
|
.Fn realloc |
|
|
.Fn realloc |
|
|
to return |
|
|
to return |
|
|
.Dv NULL . |
|
|
.Dv NULL . |
|
|
.Pp |
|
|
|
|
|
``mmap(2) failed, check limits.'' |
|
|
|
|
|
This is a rather weird condition that is most likely to mean that |
|
|
|
|
|
the system is seriously overloaded or that your ulimits are sick. |
|
|
|
|
|
.Pp |
|
|
|
|
|
``freelist is destroyed.'' |
|
|
|
|
|
mallocs internal freelist has been stomped on. |
|
|
|
|
|
|
|
|
.It Dq mmap(2) failed, check limits. |
|
|
|
|
|
This is a rather weird condition that is most likely to indicate a |
|
|
|
|
|
seriously overloaded system or a |
|
|
|
|
|
.Xr ulimit 1 |
|
|
|
|
|
restriction. |
|
|
|
|
|
.It Dq freelist is destroyed. |
|
|
|
|
|
.Fn malloc Ns 's |
|
|
|
|
|
internal freelist has been stomped on. |
|
|
|
|
|
.El |
|
|
.Pp |
|
|
.Pp |
|
|
Here is a brief description of the warning messages and what they mean: |
|
|
Here is a brief description of the warning messages and what they mean: |
|
|
.Pp |
|
|
|
|
|
``chunk/page is already free.'' |
|
|
|
|
|
|
|
|
.Bl -tag -width Fl |
|
|
|
|
|
.It Dq chunk/page is already free. |
|
|
A pointer to a free chunk is attempted freed again. |
|
|
A pointer to a free chunk is attempted freed again. |
|
|
.Pp |
|
|
|
|
|
``junk pointer, too high to make sense.'' |
|
|
|
|
|
The pointer doesn't make sense. It's above the area of memory that |
|
|
|
|
|
|
|
|
.It Dq junk pointer, too high to make sense. |
|
|
|
|
|
The pointer doesn't make sense. |
|
|
|
|
|
It's above the area of memory that |
|
|
.Fn malloc |
|
|
.Fn malloc |
|
|
knows something about. |
|
|
knows something about. |
|
|
This could be a pointer from some |
|
|
This could be a pointer from some |
|
|
.Xr mmap 2 'ed |
|
|
.Xr mmap 2 'ed |
|
|
memory. |
|
|
memory. |
|
|
.Pp |
|
|
|
|
|
``junk pointer, too low to make sense.'' |
|
|
|
|
|
The pointer doesn't make sense. It's below the area of memory that |
|
|
|
|
|
|
|
|
.It Dq junk pointer, too low to make sense. |
|
|
|
|
|
The pointer doesn't make sense. |
|
|
|
|
|
It's below the area of memory that |
|
|
.Fn malloc |
|
|
.Fn malloc |
|
|
knows something about. |
|
|
knows something about. |
|
|
This pointer probably came from your data or bss segments. |
|
|
This pointer probably came from your data or bss segments. |
|
|
.Pp |
|
|
|
|
|
``malloc() has never been called.'' |
|
|
|
|
|
|
|
|
.It Dq malloc() has never been called. |
|
|
Nothing has ever been allocated, yet something is being freed or |
|
|
Nothing has ever been allocated, yet something is being freed or |
|
|
realloc'ed. |
|
|
realloc'ed. |
|
|
.Pp |
|
|
|
|
|
``modified (chunk-/page-) pointer.'' |
|
|
|
|
|
|
|
|
.It Dq modified (chunk-/page-) pointer. |
|
|
The pointer passed to free or realloc has been modified. |
|
|
The pointer passed to free or realloc has been modified. |
|
|
.Pp |
|
|
|
|
|
``pointer to wrong page.'' |
|
|
|
|
|
|
|
|
.It Dq pointer to wrong page. |
|
|
The pointer that |
|
|
The pointer that |
|
|
.Fn malloc |
|
|
.Fn malloc |
|
|
is trying to free is not pointing to |
|
|
is trying to free is not pointing to |
|
|
a sensible page. |
|
|
a sensible page. |
|
|
.Pp |
|
|
|
|
|
``recursive call.'' |
|
|
|
|
|
You have tried to call recursively into these functions. |
|
|
|
|
|
I can only imagine this as happening if you call one of these |
|
|
|
|
|
functions from a signal handler, which happens to be called |
|
|
|
|
|
while you're already in here. |
|
|
|
|
|
Well, sorry to say: that's not supported. |
|
|
|
|
|
If this is a problem for you I'd like to hear about it. It |
|
|
|
|
|
would be possible to add a sigblock() around this package, |
|
|
|
|
|
but it would have a performance penalty that is not acceptable |
|
|
|
|
|
as the default. |
|
|
|
|
|
.Pp |
|
|
|
|
|
``unknown char in MALLOC_OPTIONS'' |
|
|
|
|
|
we found something we didn't understand. |
|
|
|
|
|
|
|
|
.It Dq recursive call. |
|
|
|
|
|
An attempt was made to call recursively into these functions, i.e., from a |
|
|
|
|
|
signal handler. |
|
|
|
|
|
This behavior is not supported. |
|
|
|
|
|
In particular, signal handlers should |
|
|
|
|
|
.Em not |
|
|
|
|
|
use any of the |
|
|
|
|
|
.Fn malloc |
|
|
|
|
|
functions nor utilize any other functions which may call |
|
|
|
|
|
.Fn malloc |
|
|
|
|
|
(e.g., |
|
|
|
|
|
.Xr stdio 3 |
|
|
|
|
|
routines). |
|
|
|
|
|
.It Dq unknown char in MALLOC_OPTIONS |
|
|
|
|
|
We found something we didn't understand. |
|
|
|
|
|
.El |
|
|
.Sh FILES |
|
|
.Sh FILES |
|
|
.Bl -tag -width "/etc/malloc.conf" |
|
|
.Bl -tag -width "/etc/malloc.conf" |
|
|
.It Pa /etc/malloc.conf |
|
|
.It Pa /etc/malloc.conf |
|
|