alloca

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Malloc.h - Index


Header-Datei

malloc.h

Prototyp

void *alloca(size_t size);

Beschreibung

Reserviert temporär Speicher auf dem Stack.

alloca reserviert size Bytes auf dem Stack. Der reservierte Speicher wird beim Beendigen der Funktion automatisch freigegeben.

Von der Verwendung von alloca wird abgeraten. Die Funktion alloca sollte nie im try-Blocks eines C++-Programms verwendet werden. Wenn eine Exception ausgelöst wird, werden alle Daten beschädigt, die von alloca auf dem Stack abgelegt werden.

Rückgabewert

Wenn ausreichend Stack-Speicher verfügbar ist, gibt alloca einen Zeiger auf den reservierten Stack-Bereich zurück. Andernfalls wird NULL zurückgegeben.

Portabilität

POSIX ANSI C ANSI C++ Win32 Win64 OS X
alloca +

Beispiel

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

void test(int a) {
    char *newstack;
    int len = a;
    char dummy[1];
    dummy[0] = 0; /* force good stack frame */
    printf("SP before calling alloca(0x%X) = 0x%X\n", len, _SP);
    newstack = (char *) alloca(len);
    printf("SP after calling alloca = 0x%X\n", _SP);
    if (newstack)
        printf("Alloca(0x%X) returned %p\n", len, newstack);
    else
        printf("Alloca(0x%X) failed\n", len);
}

void main() {
    test(256);
    test(16384);
}