Académique Documents
Professionnel Documents
Culture Documents
—
Gestion de la mémoire
L3 UPJV
Septembre 2021
On appelle fuite mémoire, le fait que dans un programme, la mémoire associé à des données
dynamiques qui ne sont plus utilisées, n’est jamais libérée (malloc sans free). Cela peut
être problématique, notemment pour les programmes systèmes qui ne s’arrètent jamais : à
un moment donné la mémoire peut être pleine, et il faut alors redémarrer le système. Les
programmes qui utilisent des gestions automatiques de la mémoire dynamique (garbage
collector ), par exemple ceux qui sont écrit en Java, ne sont pas concernés par ce problème.
Exercice 2 On constate que la mémoire est fragmentée. Une conséquence est que bien qu’il y ait globa-
lement assez de mémoire libre, une allocation est impossible parce qu’il n’y a pas de bloc libre assez grand.
Une solution serait dans ce cas, de compacter tous les blocs alloués en une seule zone afin de créer un
bloc libre avec la mémoire restante.
Expliquer pourquoi cela n’est pas possible dans le modèle de programmation du langage C ?
Mise en oeuvre
Exercice 3 Pour chacune des politiques, vous devez réécrire le code de la fonction malloc qui retourne
l’adresse de la mémoire allouée, et qui gère la liste des blocs libres.
Pour cela, vous disposez d’une constante globale HEAP BEGIN de type void *, qui contient l’adresse
du premier octet de la zone heap. De même vous avez la constante HEAP END qui contient l’adresse du
dernier octet de la même zone.
Avant d’écrire vos fonctions, vous aurez besoin de définir la structure qui permet de chaı̂ner les blocs
libres entre eux.