minix/man/man3/malloc.3

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.