Loading

NOM

       alloca - Allouer de la mémoire à libérer automatiquement

SYNOPSIS

       #include <alloca.h>

       void *alloca(size_t size);

       La fonction alloca() alloue size octets dans la pile de l’appelant. Cet
       espace temporaire est automatiquement  libéré  lors  du  retour  de  la
       fonction ayant invoqué alloca().

VALEUR RENVOYÉE

       La  fonction  alloca()  renvoie  un  pointeur  sur  le début de la zone
       allouée. Si  l’allocation  provoque  un  dépassement  de  la  pile,  le
       comportement du programme est indéterminé.

CONFORMITÉ

       Cette fonction n’est pas dans POSIX.1-2001.

       Il  semble  que  alloca()  soit apparue dans 32V, PWB, PWB.2, BSD 3, et
       BSD4. Il existe une page de manuel la  décrivant  dans  BSD 4.3.  Linux
       utilise la version GNU.

NOTES

       La  fonction  alloca()  dépend  de  la  machine et du compilateur. Pour
       certaines applications, son utilisation peut améliorer l’efficacité  en
       comparaison  à malloc(3) et free(3). Dans certains cas, elle peut aussi
       simplifier la libération  de  la  mémoire  dans  les  applications  qui
       utilisent  longjmp(3)  ou  siglongjmp(3).  Sinon,  son  utilisation est
       déconseillée.

       Parce que l’espace alloué par alloca() est alloué sur la pile,  il  est
       automatiquement  libéré  si  le retour de la fonction est sauté avec un
       appel à longjmp(3) ou siglongjmp(3).

       N’essayez pas de libérer l’espace alloué par alloca() à  l’aide  de  la
       fonction free(3) !

   Notes à propos des versions GNU
       En  général,  gcc(1) traduit l’appel de alloca() par du code « inline».
       Ceci n’est pas le cas si l’option -ansi, -std=c89, -std=c99 ou l’option
       -fno-builtin  est fournie (et le fichier d’en-tête <alloca.h> n’est pas
       inclus.  Attention,  par  défaut,  avec  la  glibc,  <stdlib.h>  inclut
       <alloca.h> qui contient la ligne :

           #define alloca(size)   __builtin_alloca (size)

       avec  toutes  les  conséquences fâcheuses que cela entraîne si on a une
       fonction personnelle de ce nom.

       Le fait que le  code  soit  développé  « inline »  signifie  qu’il  est
       impossible  de  prendre  l’adresse  de  la  fonction  ou de changer son
       comportement en utilisant une bibliothèque différente.

       Le code « inline » consiste souvent en une seule instruction qui ajuste
       le  pointeur de pile et ne vérifie pas le débordement de pile. Il n’y a
       donc pas de retour d’erreur de valeur NULL.

BOGUES

       Il n’y a pas d’indication d’erreur si la trame sur la pile ne peut  pas
       être  étendue  (cependant,  après  un  échec d’allocation, le programme
       recevra probablement un signal SIGSEGV s’il essaye d’accéder à l’espace
       non alloué).

       Sur  beaucoup de systèmes alloca() ne doit pas être utilisée au sein de
       la liste des arguments d’un appel de fonction,  car  l’espace  de  pile
       réservé  par alloca() se trouverait alors au milieu de l’espace utilisé
       par les arguments de la fonction.

VOIR AUSSI

       brk(2), longjmp(3), malloc(3)

COLOPHON

       Cette page fait partie de  la  publication  3.23  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette  page  de  manuel  a  été  traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis  par
       Alain  Portal  <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
       francophone de traduction de Debian.

       Veuillez  signaler  toute  erreur   de   traduction   en   écrivant   à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document
       en utilisant la commande « man -L C <section> <page_de_man> ».