“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 76 — #86
i
i
i
i
i
i
i
i
76
2
• La programmation déclarative
(exécution de programme)
(manuellement ou par
Devient inactif
Allocation
Actif
Inactif
Libre
ramassage de miettes)
Désallocation
Récupération
Figure 2.18 Le cycle de vie d’un bloc de mémoire.
d’un bloc l’allouera à partir d’un réservoir de blocs libres. Le bloc devient alors actif.
Pendant son exécution, le programme n’a plus besoin de certains blocs alloués :
– S’il peut déterminer cela directement, il désalloue ces blocs. Les blocs deviennent
alors libres immédiatement. C’est ce qui se passe avec la pile sémantique dans
l’exemple Loop10.
– S’il ne peut pas déterminer cela directement, alors les blocs deviennent inactifs.
Ils ne sont plus accessibles à partir du programme, mais comme le programme ne
le sait pas, il ne peut pas libérer les blocs. C’est ce qui se passe avec la mémoire
dans l’exemple Loop10.
Dans la plupart des cas, les blocs utilisés pour gérer le contrôle (la pile sémantique)
peuvent être désalloués et les blocs utilisés pour les structures de données (la mémoire)
deviennent inactifs.
La mémoire inactive doit tôt ou tard être récupérée. Le système doit reconnaître
qu’elle est inactive et l’ajouter au réservoir de mémoire libre. Sinon, le système a une
fuite de mémoire et n’aura finalement plus de mémoire. La récupération de la mémoire
inactive est la partie la plus difficile de la gestion de mémoire, parce que reconnaître
que la mémoire est inaccessible est une condition globale. Elle dépend de tout l’état
d’exécution du programme. Les langages de bas niveau comme le C ou le C++ laissent
souvent cette tâche au programmeur, ce qui est une source majeure d’erreurs. Il y a
deux sortes d’erreurs :
– Un pointeur détaché. Cette erreur arrive quand un bloc est récupéré bien qu’il
soit toujours accessible. Le système va tôt ou tard réutiliser le bloc. Il y aura
donc des structures de données qui seront corrompues de façon imprévisible et le
programme se plantera ou fera n’importe quoi. Cette erreur est particulièrement
pernicieuse parce que l’effet (le système se plante) est généralement très loin
Précédent

- 91/370

Suivant