dynamem
Description
Gestion dynamique de la mémoire EDS.
Le gestionnaire maintiens 2 listes chaînée.
* la liste des blocs disponibles
* la liste des blocs utilisés.
STRUCTURE ENTÊTE DE BLOC |
offset | grandeur | description |
---|
0 | 2 | grandeur excluant l'entête. |
2 | 2 | lien vers le bloc suivant. |
4 | 2 | lien vers le bloc précédent. |
HEAPINIT ( -- )
Initialiation du gestionnaire, libère tous les blocs alloués.
Remet à zéro la mémoire.
Au démarrage l'unité de gestion des blocs réserve de la mémoire dynamique
donc si vous appellez HEAPINIT sur la ligne de commande ou dans une application
l'unité de gestion des blocs ne fonctionnera plus.
arguments:
aucun
retourne:
rien
HEAPSIZE ( -- n+ )
Constante, retourne la grandeur de la mémoire dynamique en octets.
arguments:
aucun
retourne:
n+ Grandeur de la mémoire dynamique.
HEAPFREE ( -- n )
Retourne le nombre d'octets libres dans la mémoire dynamique.
arguments:
aucun
retourne:
n Octets libres.
BSIZE@ ( a-addr -- n )
Retourne la grandeur d'un bloc de données en octets.
arguments:
a-addr adresse retournée par MALLOC
retourne:
n Nombre d'octets de données du bloc.
MALLOC ( n -- a-addr | 0 )
Allocation d'un bloc de mémoire dynamique.
Retourne un pointeur sur le premier octet de données de ce bloc.
Si aucun bloc n'est disponible retourne 0.
arguments:
n grandeur requise
retourne:
a-addr|0 Adresse du premier octet de donnée du bloc, ou 0 si non disponible.
FREE ( a-addr -- )
Libération d'un bloc mémoire dynamique. Le bloc libéré est ajouté à la liste des blocs libres.
arguments:
a-addr pointeur sur le bloc à libérer.
retourne:
rien
BUFFER: ( cccc S: n -- )
Alloue un bloc de mémoire dynamique de 'n' octets. Cré une constante dont
le nom cccc suis dans le texte d'entrée et assigne l'adresse du buffer à cette constante.
Ce buffer ne doit pas être libéré à moins que la constante qui le lie soit détruite
avec forget, sinon l'adresse retournée par cette constante serait invalide.
exemple:
120 BUFFER: data \ l'invocation de data va retourner l'adresse
\ du premier octet du bloc de donnée.
arguments:
n Grandeur en octet du buffer.
cccc Nom de la constante qui va retourner l'adresse du buffer.
retourne:
rien
Index