NAME
alloca —
memory allocator
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <stdlib.h>
void *
alloca(
size_t
size);
DESCRIPTION
The
alloca() function allocates
size
bytes of space in the stack frame of the caller. This temporary space is
automatically freed on return.
RETURN VALUES
The
alloca() function returns a pointer to the beginning of
the allocated space. If the allocation failed, a
NULL
pointer is returned.
SEE ALSO
cc(1),
brk(2),
calloc(3),
getpagesize(3),
malloc(3),
realloc(3),
security(7)
CAVEATS
Few limitations can be mentioned:
- The alloca() function is not part of
any C standard and its use is not portable.
- The alloca() function should be
supplied by the compiler because the compiler is allowed to make
assumptions about the stack and frame pointers. The libc
alloca() implementation cannot account for those
assumptions. While there is a machine dependent implementation of
alloca() in libc, its use is discouraged and in most
cases it will not work. Using this implementation will produce linker
warnings.
- The alloca() function is unsafe
because it cannot ensure that the pointer returned points to a valid and
usable block of memory. The allocation made may exceed the bounds of the
stack, or even go further into other objects in memory, and
alloca() cannot determine such an error. For that all
alloca() allocations should be bounded and limited to a
small size.
- Since alloca() modifies the stack at
runtime and the stack usage of each function frame cannot be predicted, it
makes many compiler security features (such as
cc(1)
-fstack-protector) useless for the calling function. See
security(7) for a
discussion.