Next: alloca-opt, Up: Particular Modules [Contents][Index]
The alloca
module provides for a function alloca
which allocates
memory on the stack, where the system allows it. A memory block allocated with
alloca
exists only until the function that calls alloca
returns
or exits abruptly.
There are a few systems where this is not possible: HP-UX systems, and some
other platforms when the C++ compiler is used. On these platforms the alloca
module provides a malloc
based emulation. This emulation will not free a
memory block immediately when the calling function returns, but rather will
wait until the next alloca
call from a function with the same or a
shorter stack length. Thus, in some cases, a few memory blocks will be kept
although they are not needed any more.
The user can #include <alloca.h>
and use alloca
on all platforms.
Note that the #include <alloca.h>
must be the first one after the
autoconf-generated config.h, for AIX 3 compatibility. Thanks to IBM for
this nice restriction!
Note that GCC 3.1 and 3.2 can inline functions that call alloca
.
When this happens, the memory blocks allocated with alloca
will not be
freed until the end of the calling function. If this calling function
runs a loop calling the function that uses alloca
, the program easily
gets a stack overflow and crashes. To protect against this compiler behaviour,
you can mark the function that uses alloca
with the following attribute:
#ifdef __GNUC__ __attribute__ ((__noinline__)) #endif
An alternative to this module is the ‘alloca-opt’ module.