alloca - Allouer de la mémoire à libérer automatiquement
Bibliothèque C standard (
libc,
-lc)
#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().
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é.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
alloca() |
Sécurité des threads |
MT-Safe |
Cette fonction n'est pas dans POSIX.1.
La fonction
alloca() est issue de PWB et de 32V et est présente
dans tous leurs dérivés.
La fonction
alloca() dépend de la machine et du compilateur. Comme
elle est allouée à partir de la pile, elle est plus rapide que
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).
L'espace alloué par
alloca() n'est
pas
désalloué automatiquement si le pointeur y faisant
référence devient seulement hors de portée.
N'essayez pas de libérer l'espace alloué par
alloca()
à l'aide de la fonction
free(3) !
Par nécessité,
alloca() est une fonction interne au
compilateur, connue aussi sous le nom de
__builtin_alloca(). Par
défaut, les compilateurs modernes traduisent de façon
automatique toutes les utilisations de
alloca() en interne, mais cela
n'est pas permis si une conformité aux standards est requise (
-ansi,
-std=c*), auquel cas
<alloca.h> est requis,
au cas où une dépendance de symbole serait émise.
Le fait que
alloca() est une fonction interne signifie qu'il est
impossible de prendre son adresse ou de changer son comportement en utilisant
une bibliothèque différente.
Les tableaux de taille variable (VLA) font partie du standard C99, facultatifs
depuis C11, et peuvent être utilisés dans un but similaire.
Néanmoins, ils ne sont par portables en C++ standard, et étant
variables, ils fonctionnent dans leur périmètre de bloc et n'ont
pas d'interface de type allocateur, ce qui les rend inadaptés à
l'implémentation de fonctionnalités comme
strdupa(3).
Du fait de la nature de la pile, il est impossible de vérifier si
l'allocation peut déborder de l'espace disponible et par
conséquent rien n'indique une erreur (cependant, le programme recevra
probablement un signal
SIGSEGV s'il essaye d'accéder à
l'espace non disponible).
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.
brk(2),
longjmp(3),
malloc(3)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Grégoire Scano <
[email protected]> et Jean-Pierre Giraud
<
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]