Pure Pascal en interne : Gestion dynamique de la mémoire
Contrairement à de nombreux autres systèmes Pascal, avec Pure Pascal, vous n'avez pas à spécifier la taille de la zone de mémoire dynamique (le soi-disant tas). Au lieu de cela, le tas est étendu si nécessaire en demandant des blocs de mémoire volumineux (32 Ko) au système d'exploitation. Si un tel bloc redevient complètement vide en appelant Dispose, Freemem ou Release, le bloc est retourné au système d'exploitation.
Comportement en cas de mémoire insuffisante
La bibliothèque signale normalement une erreur d'exécution immédiatement si un appel à New ou Getmem ne peut pas être satisfait en raison d'une mémoire insuffisante.Toutefois, vous pouvez modifier ce comportement en pointant la variable de pointeur HeapError dans l'unité SYSTEM vers une routine que vous avez déclarée. Cette routine est appelée lorsque la mémoire est épuisée. Il doit être déclaré comme suit:
Le paramètre Size représente la taille de la zone mémoire demandée.function HeapFunc(Size: longint): integer;
La fonction peut maintenant essayer, par exemple, de libérer de la mémoire qui n'est pas absolument nécessaire. Il utilise la valeur de retour pour signaler les réussites qu'il a eues. Trois valeurs de retour différentes sont possibles:
- 0 signifie qu'il n'y a plus de mémoire disponible. Le programme se termine avec l'erreur d'exécution 203 (débordement de tas).
- 1 signifie qu'il n'y a plus de mémoire disponible, mais que le programme ne doit pas encore être terminé. Au lieu de cela, l'appel correspondant à New ou Getmem renvoie la valeur nil.
- 2 signifie que la fonction a réussi à récupérer de la mémoire. La bibliothèque essaiera alors à nouveau d'allouer la mémoire requise.
et installez-le au début de votre programme dans la variable HeapError:function HeapFunc(Size: longint): integer; begin HeapFunc := 1; end;
... begin { Début du programme principal } HeapError := @HeapFunc; ... end.