Function Macro

GLiballoca

Declaration [src]

#define g_alloca (
  size
)

Description [src]

Allocates size bytes on the stack; these bytes will be freed when the current stack frame is cleaned up. This macro essentially just wraps the alloca() function present on most UNIX variants. Thus it provides the same advantages and pitfalls as alloca():

  • 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 alloca() uses.

  • Allocation failure due to insufficient stack space is not indicated with a NULL return 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.

  • Allowing size to 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. size must 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.

Parameters

size -
 

Number of bytes to allocate.