ALLOC |
Allocation |
|---|---|
| Pascal | |
Syntaxe
| Procedure ALLOC(Var p:pointer-type); |
| Procedure ALLOC(Var p:pointer-type;t:variant-type); |
Paramètres
| Nom | Description |
|---|---|
| p | Ce paramètre permet d'indiquer la composante. |
| t | Ce paramètre permet d'indiquer la valeur du champ de balise. |
Description
Cette procédure permet d'allouer de la mémoire dynamiquement pour une composante. Dans la première syntaxe, la procédure alloue une nouvelle composante dans la classe à laquelle le pointeur de la variable est lié et attribue le pointeur désignant la nouvelle composante au paramètre p. Si le type de la composante est d'un type d'enregistrement avec des variantes, alors il s'agit d'une fiche. Dans la deuxième syntaxe, la procédure peut être utilisé pour allouer une composante de la variante dont la valeur du champ de balise est le paramètre t. Cependant, cette affectation n'implique pas une affectation au champ de balise. Si la classe est déjà allouée de manière complète, la valeur NIL sera écrite dans le paramètre p.
Algorithme
|
MODULE ALLOC(Ref Pointeur,Taille) SI Taille > 0 ALORS Allouer un bloc de mémoire de Taille octets SI la mémoire est allouée avec succès ALORS Affecter l'adresse du bloc de mémoire au Pointeur SINON Définir Pointeur à NIL (aucune mémoire allouée) FIN SI FIN SI |
Remarques
- La procédure alloc est mentionné dans la documentation Pascal de novembre 1970 de Niklaus Wirth dans la section «10.1.2 Class component allocation procedure»
- ALLOC est une procédure de gestion mémoire utilisée pour l'allocation dynamique. Elle permet de réserver de l'espace mémoire à l'exécution pour un pointeur donné. Cela permet de travailler avec des structures dont la taille n'est pas fixée à la compilation.
- Le paramètre p représente un pointeur vers la zone mémoire à allouer. Après l'appel, p pointe vers une nouvelle composante du type approprié. Si l'allocation échoue, p reçoit la valeur spéciale NIL.
- La seconde syntaxe de ALLOC est utilisée pour les types avec variantes. Elle permet de préciser quelle version de la structure doit être allouée. Cela améliore la flexibilité quand plusieurs variantes coexistent dans un même type.
- Le paramètre t ne modifie pas le champ de balise dans l'enregistrement. Il est uniquement utilisé pour choisir la variante à allouer en mémoire. Il faudra affecter manuellement la valeur du champ de balise après l'allocation si nécessaire.
- L'utilisation de ALLOC implique une gestion manuelle de la mémoire. Il est donc essentiel de libérer les blocs alloués une fois inutiles. Sans cela, le programme risque des fuites mémoire.
- ALLOC n'est pas une fonction : elle ne retourne pas de valeur. Le résultat de l'opération est visible uniquement à travers la mise à jour du pointeur passé par référence. Cela suit la logique des procédures modifiant des variables en Pascal.
- L'allocation échoue si la classe mémoire est pleine ou indisponible. Dans ce cas, ALLOC ne déclenche pas d'exception mais assigne NIL au pointeur. Il est donc impératif de vérifier si p <> NIL après l'appel.
- Cette procédure est particulièrement utile pour la gestion de listes, arbres ou structures récursives. Elle permet d'ajouter dynamiquement des éléments à des structures complexes. C'est un outil fondamental pour les algorithmes utilisant des structures de données dynamiques.
Dernière mise à jour : Mercredi, le 10 avril 2019