59 lines
2.5 KiB
Groff
59 lines
2.5 KiB
Groff
|
|
NAME
|
|
malloc, free, realloc, calloc - main memory allocator
|
|
SYNTAX
|
|
char *malloc (size)
|
|
unsigned size;
|
|
void free (ptr)
|
|
char *ptr;
|
|
char *realloc (ptr, size)
|
|
char *ptr;
|
|
unsigned size;
|
|
char *calloc (nelem, elsize)
|
|
unsigned nelem, elsize;
|
|
DESCRIPTION
|
|
Malloc and free provide a simple general-purpose memory
|
|
allocation package. Malloc returns a pointer to a block of
|
|
at least size bytes suitably aligned for any use.
|
|
The argument to free is a pointer to a block previously
|
|
allocated by malloc; after free is performed this space is
|
|
made available for further allocation, but its contents are
|
|
left undisturbed.
|
|
Undefined results will occur if the space assigned by malloc
|
|
is overrun or if some random number is handed to free.
|
|
Malloc allocates the first big enough contiguous reach of
|
|
free space found in a circular search from the last block
|
|
allocated or freed, coalescing adjacent free blocks as it
|
|
searches. 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. If no free block of size bytes is
|
|
available in the storage arena, then realloc will ask malloc
|
|
to enlarge the arena by size bytes and will then move the
|
|
data to the new space.
|
|
Realloc also works if ptr points to a block freed since the
|
|
last call of malloc, realloc, or calloc; thus sequences of
|
|
free, malloc and realloc can exploit the search strategy of
|
|
malloc to do storage compaction.
|
|
Calloc allocates space for an array of nelem elements of
|
|
size elsize. The space is initialized to zeros.
|
|
|
|
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), malloc(3X).
|
|
DIAGNOSTICS
|
|
Malloc, realloc and 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. When
|
|
this happens the block pointed to by ptr may be destroyed.
|
|
NOTE
|
|
Search time increases when many objects have been allocated;
|
|
that is, if a program allocates but never frees, then each
|
|
successive allocation takes longer. For an alternate, more
|
|
flexible implementation, see malloc(3X).
|