GETMEM |
Demande de la mémoire |
---|---|
Turbo Pascal 3+ | System |
Syntaxe
Procedure GetMem(p:Pointer; t:Integer); | Version 3 |
Procedure GetMem(p:Pointer; t:Word); | Version 4 à 7 |
Paramètres
Nom | Description |
---|---|
p | Ce paramètre retourne le pointeur sur la mémoire dynamique alloué |
t | Ce paramètre permet de demander la taille de la mémoire demandé en octet |
Description
Cette fonction permet d'effectuer une allocation dynamique sur la mémoire de tas.
Remarques
- Le paramètre p est une variable de pointeur de tout type de pointeur. Le paramètre t est une expression de type Word à partir de Turbo Pascal 4 spécifiant la taille en octets de la variable dynamique à allouer. La variable nouvellement créée peut être référencée comme p^.
- La quantité de mémoire disponible pour l'allocation de mémoire dynamique dépend de la directive de compilation {$M pile,tas_min,tax_max}.
- GetMem vs New : La différence entre le fait d'utiliser la fonction New et la procédure GetMem, réside dans le fait que GetMem permet d'indiquer la taille exacte de mémoire a attribué.
- Si la quantité de mémoire de 640 Ko n'est pas suffisante pour vos besoins, vous devriez envisager d'utiliser le partagiciel «VGARAM» de Brett Warthen qu'il a été développé en 1990, lequel offre la possibilité de prendre les 96 Ko suivant la mémoire conventionnelle qu'utilise la carte vidéo VGA et de l'ajouter aux 640 Ko de façon à obtenir un total de 736 Ko pour votre mémoire conventionnel !
- Il est possible de demander la taille maximum de mémoire pouvant être allouer dans le tas à l'aide de la fonction «MaxAvail».
- Le plus grand bloc pouvant être alloué en même temps sur le tas est 65 521 octets (soit 64 Ko-$F). Si le segment de mémoire n'est pas fragmenté, par exemple au début d'un programme, des appels successifs à GetMem renvoient des blocs de mémoire voisins.
- Il faut vous assurez d'avoir assez de mémoire dynamique de disponible dans le tas, afin de pouvoir créer la variable dynamique, car sinon vous aurez l'erreur d'exécution suivante :
Error 203: Heap overflow error |
Exemple
Voici quelques exemples typiques de l'utilisation de la fonction «GetMem» en Turbo Pascal :
- Program GemMemSamples;
-
- Type
- TInteger = Array[0..20] of Integer;
-
- Var
- P:^TInteger;
- I:Integer;
-
- BEGIN
- GetMem(P,20 * SizeOf(Integer));
- If NIL <> P Then Begin
- For I := 0 to 19 do P^[I] := 1000-(I * 10);
- WriteLn('Valeur P^[15] = ',P^[15]);
- FreeMem(P,20 * SizeOf(Integer));
- End
- Else
- Begin
- WriteLn('Impossible d''allouer de la mémoire dynamiquement !');
- End;
- END.
on obtiendra le résultat suivant :
Valeur p[15] = 850Référence
Aide-mémoire de Turbo Pascal versions de 3 à 6, Edition Marabout, De Groote, Virga, 1992, ISBN: 2-501-01833-8, page 219.
Le grand livre du Turbo & Borland Pascal 7.0, Edition Micro Application, Reiner Scholles, 1993, ISBN: 2-86899-873-9, page 1242.
Dernière mise à jour : Dimanche, le 12 juillet 2015