128 lines
3.5 KiB
Groff
128 lines
3.5 KiB
Groff
.\" Copyright (c) 1980 Regents of the University of California.
|
|
.\" All rights reserved. The Berkeley software License Agreement
|
|
.\" specifies the terms and conditions for redistribution.
|
|
.\"
|
|
.\" @(#)malloc.3 6.3 (Berkeley) 5/14/86
|
|
.\"
|
|
.TH MALLOC 3 "May 14, 1986"
|
|
.UC 4
|
|
.SH NAME
|
|
malloc, free, realloc, calloc, alloca \- memory allocator
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.ft B
|
|
#include <sys/types.h>
|
|
#include <stdlib.h>
|
|
#include <alloca.h>
|
|
|
|
void *malloc(size_t \fIsize\fP)
|
|
void free(void *\fIptr\fP)
|
|
void *realloc(void *\fIptr\fP, size_t \fIsize\fP)
|
|
void *calloc(size_t \fInelem\fP, size_t \fIelsize\fP)
|
|
void *alloca(size_t \fIsize\fP)
|
|
.ft R
|
|
.fi
|
|
.SH DESCRIPTION
|
|
.B Malloc
|
|
and
|
|
.B free
|
|
provide a general-purpose memory allocation package.
|
|
.B Malloc
|
|
returns a pointer to a block of at least
|
|
.I size
|
|
bytes beginning on a word boundary.
|
|
.PP
|
|
The argument to
|
|
.B free
|
|
is a pointer to a block previously allocated by
|
|
.BR malloc ;
|
|
this space is made available for further allocation,
|
|
but its contents are left undisturbed.
|
|
A call with a null
|
|
.I ptr
|
|
is legal and does nothing.
|
|
.PP
|
|
Needless to say, grave disorder will result if the space assigned by
|
|
.B malloc
|
|
is overrun or if some random number is handed to
|
|
.BR free .
|
|
.PP
|
|
.B Malloc
|
|
maintains multiple lists of free blocks according to size,
|
|
allocating space from the appropriate list.
|
|
It calls
|
|
.B sbrk
|
|
(see
|
|
.BR brk (2))
|
|
to get more memory from the system when there is no
|
|
suitable space already free.
|
|
.PP
|
|
.B Realloc
|
|
changes the size of the block pointed to by
|
|
.I ptr
|
|
to
|
|
.I size
|
|
bytes and returns a pointer to the (possibly moved) block.
|
|
The contents will be unchanged up to the lesser of the new and old sizes.
|
|
A call with a null
|
|
.I ptr
|
|
is legal and has the same result as
|
|
.BI malloc( size )\fR.
|
|
.PP
|
|
.B Calloc
|
|
allocates space for an array of
|
|
.I nelem
|
|
elements of size
|
|
.I elsize.
|
|
The space is initialized to zeros.
|
|
.PP
|
|
.B Alloca
|
|
allocates
|
|
.I size
|
|
bytes of space in the stack frame of the caller.
|
|
This temporary space is automatically freed on
|
|
return.
|
|
.PP
|
|
Each of the allocation routines returns a pointer
|
|
to space suitably aligned (after possible pointer coercion)
|
|
for storage of any type of object.
|
|
.PP
|
|
To debug malloc-related errors, specify the
|
|
.I MALLOC_DEBUG
|
|
variable in the environment of the program you want to debug. This causes an
|
|
alternate malloc implementation to be used. This version allocates blocks at
|
|
the end of random pages so that reads and writes past the end of the buffer
|
|
cause SIGSEGV. On realloc or free calls, the area just before the buffer is
|
|
verified to also detect writes before the start of the buffer. Buffer overflows
|
|
in the BSS section are also more likely to be detected because the brk is never
|
|
moved. Please note that this flags comes with a considerable performance
|
|
penalty and dramatically increases memory usage.
|
|
.SH SEE ALSO
|
|
.BR brk (2).
|
|
.SH DIAGNOSTICS
|
|
.BR Malloc ,
|
|
.BR realloc
|
|
and
|
|
.B calloc
|
|
return a null pointer if there is no available memory or if the arena
|
|
has been detectably corrupted by storing outside the bounds of a block.
|
|
.SH NOTES
|
|
Other implementations of
|
|
.BR malloc ,
|
|
.BR realloc
|
|
or
|
|
.BR calloc
|
|
may return a null pointer if the size of the requested block is zero. This
|
|
implementation will always return a zero length block at a unique address,
|
|
but you should keep in mind that a null return is possible if the program
|
|
is run to another system and that this should not be mistakenly seen as
|
|
an error.
|
|
.SH BUGS
|
|
When
|
|
.B realloc
|
|
returns a null pointer, the block pointed to by
|
|
.I ptr
|
|
may be destroyed.
|
|
.PP
|
|
.B Alloca
|
|
is machine dependent; its use is discouraged.
|