ALLOCA(3)

ALLOCA(3) | Library Functions Manual | ALLOCA(3)

# 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.

October 24, 2012 | NetBSD 9.5