alloca
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).
Sommaire
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);
}