Next: Safe Allocation Macros, Previous: alloca, Up: Particular Modules [Contents][Index]
The alloca-opt
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-opt
module provides no replacement, just a preprocessor macro
HAVE_ALLOCA.
The user can #include <alloca.h>
on all platforms, and use
alloca
on those platforms where the preprocessor macro HAVE_ALLOCA
evaluates to true. If HAVE_ALLOCA is false, the code should use a heap-based
memory allocation based on malloc
or (in C++) new
. 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