MALLOC(3C)              Standard C Library Functions              MALLOC(3C)
NAME
     malloc, 
calloc, 
free, 
freezero, 
memalign, 
realloc, 
reallocf,     
reallocarray, 
recallocarray, 
valloc, 
alloca - memory allocator
SYNOPSIS
     #include <stdlib.h>     void *     malloc(
size_t size);     
void *     calloc(
size_t nelem, 
size_t elsize);     
void     free(
void *ptr);     
void     freezero(
void *ptr, 
size_t size);     
void *     memalign(
size_t alignment, 
size_t size);     
void *     realloc(
void *ptr, 
size_t size);     
void *     reallocf(
void *ptr, 
size_t size);     
void *     reallocarray(
void *ptr, 
size_t nelem, 
size_t elsize);     
void *     recallocarray(
void *ptr, 
size_t oldnelem, 
size_t newnelem,         
size_t elsize);     
void *     valloc(
size_t size);     
#include <alloca.h>     void *     alloca(
size_t size);
DESCRIPTION
     The 
malloc() and 
free() functions provide a simple, general-purpose
     memory allocation package.  The 
malloc() function returns a pointer to
     a block of at least 
size bytes suitably aligned for any use.  If the
     space assigned by 
malloc() is overrun, the results are undefined.
     The argument to 
free() is a pointer to a block previously allocated by     
malloc(), 
calloc(), 
realloc(), 
reallocf(), 
reallocarray(), or     
recallocarray().  After 
free() is executed, this space is made
     available for further allocation by the application, though not
     returned to the system.  Memory is returned to the system only upon
     termination of the application.  If 
ptr is a null pointer, no action
     occurs.  If a random number is passed to 
free(), the results are
     undefined.
     The 
freezero() function is similar to the 
free() function except it
     ensures memory is explicitly discarded.  If 
ptr is NULL, no action
     occurs.  If 
ptr is not NULL, the 
size argument must be equal or smaller
     than the size of the earlier allocation that returned 
ptr.  
freezero()
     guarantees the memory range starting at 
ptr with length 
size is
     discarded while deallocating the whole object originally allocated.
     The 
calloc() function allocates space for an array of 
nelem elements of
     size 
elsize.  The space is initialized to zeros.
     The 
memalign() function allocates 
size bytes on a specified alignment
     boundary and returns a pointer to the allocated block.  The value of
     the returned address is guaranteed to be an even multiple of 
alignment.
     The value of 
alignment must be a power of two and must be greater than
     or equal to the size of a word.
     The 
realloc() function 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 the new size of the block requires movement of the block, the space
     for the previous instantiation of the block is freed.  If the new size
     is larger, the contents of the newly allocated portion of the block are
     unspecified.  If 
ptr is NULL, 
realloc() behaves like 
malloc() for the
     specified size.  If 
size is 0 and 
ptr is not a null pointer, the space
     pointed to is freed.
     The 
reallocf() function behaves in the same way as 
realloc() except
     that the passed pointer is freed automatically on failure.
     The 
reallocarray() function is similar to 
realloc(), but operates on     
nelem elements of size 
elsize and checks for overflow in 
nelem*
elsize     calculation.
     The 
recallocarray() function is similar to 
reallocarray() except it
     ensures newly allocated memory is cleared similar to 
calloc().  If 
ptr     is NULL, 
oldnelem is ignored and the call is equivalent to 
calloc().
     If 
ptr is not NULL, 
oldnelem must be a value such that 
oldnelem*
elsize     is the size of the earlier allocation that returned 
ptr, otherwise the
     behaviour is undefined.
     The 
valloc() function has the same effect as 
malloc(), except that the
     allocated memory will be aligned to a multiple of the value returned by     
sysconf(_SC_PAGESIZE).
     The 
alloca() function allocates 
size bytes of space in the stack frame
     of the caller, and returns a pointer to the allocated block.  This
     temporary space is automatically freed when the caller returns.  If the
     allocated block is beyond the current stack limit, the resulting
     behavior is undefined.
RETURN VALUES
     Upon successful completion, each of the allocation functions returns a
     pointer to space suitably aligned (after possible pointer coercion) for
     storage of any type of object.
     If there is no available memory, 
malloc(), 
calloc(), 
realloc(),     
reallocf(), 
reallocarray(), 
recallocarray(), 
memalign(), and 
valloc()
     return a null pointer.
     When 
realloc() is called with 
size > 0 and returns NULL, the block
     pointed to by 
ptr is left intact.  By contrast, when 
reallocf() is
     called with 
size > 0 and returns NULL, the block pointed to by 
ptr will
     have been freed.
     If 
size, 
nelem, or 
elsize is 0, either a null pointer or a unique
     pointer that can be passed to 
free() is returned.
     If 
malloc(), 
calloc(), 
realloc(), 
reallocf(), 
reallocarray(), or     
recallocarray() returns unsuccessfully, 
errno will be set to indicate
     the error.  The 
free() and 
freezero() functions do not set 
errno.
ERRORS
     The 
malloc(), 
calloc(), 
realloc(), 
reallocf(), and 
reallocarray()
     functions will fail if:
     ENOMEM             The physical limits of the system are exceeded by                        
size bytes of memory which cannot be allocated, or
                        there's integer overflow in 
reallocarray().
     EAGAIN             There is not enough memory available to allocate                        
size bytes of memory; but the application could try
                        again later.
     The 
recallocarray() function will fail if:
     EINVAL             
ptr is not NULL and multiplying 
oldnelem and 
elsize                        results in integer overflow.
USAGE
     Portable applications should avoid using 
valloc() but should instead
     use 
malloc() or 
mmap(2).  On systems with a large page size, the number
     of successful 
valloc() operations might be 0.
     These default memory allocation routines are safe for use in
     multithreaded applications but are not scalable.  Concurrent accesses
     by multiple threads are single-threaded through the use of a single
     lock.  Multithreaded applications that make heavy use of dynamic memory
     allocation should be linked with allocation libraries designed for
     concurrent access, such as 
libumem(3LIB) or 
libmtmalloc(3LIB).
     Applications that want to avoid using heap allocations (with 
brk(2))
     can do so by using either 
libumem(3LIB) or 
libmapmalloc(3LIB).  The
     allocation libraries 
libmalloc(3LIB) and 
libbsdmalloc(3LIB) are
     available for special needs.
     Comparative features of the various allocation libraries can be found
     in the 
umem_alloc(3MALLOC) manual page.
INTERFACE STABILITY
     The 
malloc(), 
calloc(), 
free(), 
realloc(), 
valloc() functions are     
Standard.     The 
freezero(), 
reallocf(), 
reallocarray(), and 
recallocarray()
     functions are 
Committed.
     The 
memalign() and 
alloca() functions are 
Stable.
MT-LEVEL     Safe.SEE ALSO
     brk(2), 
getrlimit(2), 
libbsdmalloc(3LIB), 
libmalloc(3LIB),     
libmapmalloc(3LIB), 
libmtmalloc(3LIB), 
libumem(3LIB),     
umem_alloc(3MALLOC), 
watchmalloc(3MALLOC), 
attributes(7)WARNINGS
     Undefined results will occur if the size requested for a block of
     memory exceeds the maximum size of a process's heap, which can be
     obtained with 
getrlimit(2).
     The 
alloca() function is machine-, compiler-, and most of all, system-
     dependent.  Its use is strongly discouraged.
illumos                      September 12, 2019                      illumos