alloca()

Updated: April 19, 2023

Allocate automatic space from the stack

Synopsis:

#include <alloca.h>

void *alloca( size_t size );

Arguments:

size
The number of bytes of memory to allocate.

Library:

libc

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

Description:

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.

Note: Don't use this function in an expression that's an argument to a function. Since it is a macro and it evaluates the argument more than once, doing so may result in unexpected behaviour.

Returns:

A pointer to the start of the allocated memory, or NULL if there wasn't enough memory.

Examples:

#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;
}

Classification:

Unix

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes

Caveats:

Don't use alloca() as an argument to a function. Since it is a macro and it evaluates the argument more than once, doing so may result in unexpected behaviour.