#define g_alloca ( size )
size bytes on the stack; these bytes will be freed when the current
stack frame is cleaned up. This macro essentially just wraps the
function present on most UNIX variants.
Thus it provides the same advantages and pitfalls as
alloca()is very fast, as on most systems it’s implemented by just adjusting the stack pointer register.
It doesn’t cause any memory fragmentation, within its scope, separate
alloca()blocks just build up and are released together at function end.
Allocation sizes have to fit into the current stack frame. For instance in a threaded environment on Linux, the per-thread stack size is limited to 2 Megabytes, so be sparse with
Allocation failure due to insufficient stack space is not indicated with a
NULLreturn like e.g. with
malloc(). Instead, most systems probably handle it the same way as out of stack space situations from infinite function recursion, i.e. with a segmentation fault.
sizeto be specified by an untrusted party would allow for them to trigger a segmentation fault by specifying a large size, leading to a denial of service vulnerability.
sizemust always be entirely under the control of the program.
Special care has to be taken when mixing
alloca()with GNU C variable sized arrays. Stack space allocated with
alloca()in the same scope as a variable sized array will be freed together with the variable sized array upon exit of that scope, and not upon exit of the enclosing function scope.