Gestion de la Mémoire

La mémoire est gérée automatiquement au sein des scripts.

Il n'est en général pas nécessaire de libérer la mémoire, cependant pour les cas où des scripts seraient amenés à utiliser de grandes quantités de mémoire, ce document décrit la manière dont l'automatisation a lieu.

Comptage de référénce

Le mode de gestion principal est le comptage de référence automatique : dès qu'une ressource partagée (objet, chaînes, tableau, interface...) n'est plus référencée, elle est immédiatement libérée.

  • Une variable garde une référence dans le contexte où elle a été déclarée, par exemple une variable de procédure ne garde pas de référence quand la procédure est terminée.
  • Un champ d'objet ou un élément de tableau garde une référence tant que l'objet où la table n'a pas été libérée.
  • Mettre une variable d'objet à nil annule la référence à cet objet.

Ramasse-miettes

Un ramasse-miettes prend en charge l'élimination des cycles éventuels à la fin de l'exécution de chaque script.

En effet le comptage de référence ne suffira pas à libérer par lui-même des objets ayant des références circulaires entre eux.
Pour libérer des cycles sans faire intervenir le ramasse-miette, il suffit de mettre manuellement des références à nil afin de briser le cycle, ou de libérer manuellement un objet du cycle, les autres objets du cycle pourront alors être libérés automatiquement.

Libération manuelle

Enfin il est possible de libérer manuellement des objets en appelant leur destructeur (au moyen de Free ou Destroy).
Cela libère l'espace de données d'un objet, ne conservant qu'une instance minimale "invalide". Tout accès ultérieur à cette instance invalide déclenchera une erreur.
Il s'agit donc d'un moyen non seulement de libérer un objet, mais aussi de garantir qu'il ne sera plus utilisable, même au travers de références qui auraient été conservées par erreur.