Allocate automatic space from the stack


#include <alloca.h>

void* alloca( size_t size );


The number of bytes of memory to allocate.



Use the -l c option to qcc to link against this library. This library is usually included automatically.


The alloca() function allocates space for an object of size bytes from the stack. The allocated space is automatically discarded when the current function exits.

  • Don't use this function in an expression that's an argument to a function.
  • By default, alloca() is implemented as __builtin_alloca(). If you compile with the -fno-builtin option, you'll use the libc version of alloca(), which is a cover for malloc() and behaves in a slightly different manner:
    • It keeps track of all blocks allocated with alloca() and reclaims any that are found to be deeper in the stack than the current invocation. It therefore doesn't reclaim storage as soon as it becomes invalid, but it will do so eventually.
    • As a special case, alloca(0) reclaims storage without allocating any. You can use this feature to force garbage collection.


A pointer to the start of the allocated memory, or NULL if an error occurred (errno is set).


#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>

FILE *open_err_file( char *name )
    char *buffer;

    /* allocate temporary buffer for file name */
    buffer = (char *)alloca( strlen( name ) + 5 );

    if( buffer ) {
        FILE *fp;

        sprintf( buffer, "%s.err", name );
        fp = fopen( buffer, "w" );

        return fp;

    return (FILE *)NULL;

int main( void )
    FILE *fp;

    fp = open_err_file( "alloca_test" );
    if( fp == NULL ) {
        printf( "Unable to open error file\n" );
    } else {
        fprintf( fp, "Hello from the alloca test.\n" );
        fclose( fp );

    return EXIT_SUCCESS;



Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes


Don't use alloca() as an argument to a function.