NAME
malloc, free, realloc, calloc, alloca - memory allocator
SYNOPSIS
void *malloc(size)
size_t size;
void free(ptr)
void *ptr;
void *realloc(ptr, size)
void *ptr;
size_t size;
void *calloc(nelem, elsize)
size_t nelem, elsize;
void *alloca(size)
size_t size;
DESCRIPTION
Malloc and free provide a general-purpose memory allocation
package. Malloc returns a pointer to a block of at least
size
bytes beginning on a word boundary.
The argument to free is a
pointer to a block previously allocated
by malloc; this space is made available for further
allocation, but
its contents are left undisturbed.
Needless to say, grave disorder
will result if the space assigned
by malloc is overrun or if some random number is handed to
free.
Malloc maintains a list of free
blocks sorted by size, allocating
space from the first block of appropriate size. It calls
sbrk (see
brk(2)) to get more memory from the system when there is no
suitable space already free.
Realloc changes the size of the
block pointed to by ptr to 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.
In order to be compatible with
older versions, realloc also works
if ptr points to a block freed since the last call of
malloc,
realloc or calloc; sequences of free, malloc and realloc
were
previously used to attempt storage compaction. This
procedure is
no longer recommended.
Calloc allocates space for an
array of nelem elements of size
elsize. The space is initialized to zeros.
Alloca allocates size bytes of
space in the stack frame of the
caller. This temporary space is automatically freed on
return.
Each of the allocation routines
returns a pointer to space suitably
aligned (after possible pointer coercion) for storage of any
type
of object.
SEE ALSO
brk(2)
DIAGNOSTICS
Malloc, realloc and calloc return a null pointer (0) if
there is no
available memory or if the arena has been detectably
corrupted by
storing outside the bounds of a block. Malloc may be
recompiled to
check the arena very stringently on every transaction; those
sites
with a source code license may check the source code to see
how
this can be done.
BUGS
When realloc returns 0, the block pointed to by ptr may be
destroyed.
The current implementation of
malloc does not always fail
gracefully when system memory limits are approached. It may
fail
to allocate memory when larger free blocks could be broken
up, or
when limits are exceeded because the size is rounded up. It
is
optimized for sizes that are powers of two.
Alloca is machine dependent; its use is discouraged.