alloca

De RAD Studio
Aller à : navigation, rechercher

Remonter à malloc.h


Remarque: Cette fonctionnalité est uniquement disponible pour le compilateur bcc32 traditionnel (elle n'est pas disponible pour le compilateur moderne amélioré par Clang).

Fichier d'en-tête

malloc.h

Prototype

void *alloca(size_t size);

Description

Alloue l'espace temporaire de la pile.

alloca alloue la taille en octets. L'espace alloué est automatiquement libéré au moment de la sortie de la fonction appelante.

L'emploi de alloca n'est pas conseillé. La fonction alloca ne doit jamais être utilisée dans le try-block d'un programme C++. Si une exception est déclenchée, les valeurs placées dans la pile par alloca sont endommagées.

Valeur de retour

S'il y a suffisamment d'espace, alloca renvoie un pointeur à la zone de pile ayant été allouée. Sinon elle renvoie NULL.

Portabilité

POSIX ANSI C ANSI C++ Win32 Win64 macOS
alloca +

Exemple

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