Académique Documents
Professionnel Documents
Culture Documents
Gestion mémoire
2 novembre 2011
2 Environnement d’exécution
Organisation de la mémoire
Allocation explicite
Allocation implicite
Mécanismes de récupération de la mémoire
Les langages objets sont très populaires car ils offrent des mécanismes
de structuration et d’encapsulation des données adaptés au
développement de larges applications.
Les mécanismes sophistiqués des langages objets (héritage, liaison
tardive, . . . ) doivent être pris en compte à la compilation.
2 Environnement d’exécution
Organisation de la mémoire
Allocation explicite
Allocation implicite
Mécanismes de récupération de la mémoire
Dans le cas de l’héritage simple, une classe D hérite au plus d’une autre
classe C.
Organisation simple des variables d’états des objets de la classe D :
extension des variables de la classe C
Les méthodes compilées pour les objets de la classe C peuvent
s’appliquer aux objets de la classe D.
Un objet de la classe D qui hérite de C contient d’abord les variables de
C puis celles de D.
Accès obj.var :
Calculer la valeur de l’objet o (adresse d’un bloc dans le tas)
Accéder au champs de l’objet (décalage connu statiquement)
code(obj.var) = code(obj) | lw $a0, dec(var)($a0)
A B C D
père Object père A père B père C
f A_f f A_f f A_f f D_f
g B_g g C_g g C_g
B_g o2
A_f x
père B classe o1
A_f
père A
zone statique tas pile
descr. de classes objets adresses
2 Environnement d’exécution
Organisation de la mémoire
Allocation explicite
Allocation implicite
Mécanismes de récupération de la mémoire
Dans le cas de l’héritage multiple, une classe D peut hériter des objets
des classes C1 et C2 .
On ne peut plus organiser simplement les variables de D, C1 et C2 pour
que les procédures compilées pour Ci s’appliquent aux objets de D.
Trouver pour chaque variable d’état un décalage qui soit le même pour toutes
les sous-classes.
Coloriage d’un graphe :
sommet : variable d’état
arête : variables qui coexistent dans une classe
Objet
A B A: B: C: D:
a a a
b d b
C D c c
e
2 Environnement d’exécution
Organisation de la mémoire
Allocation explicite
Allocation implicite
Mécanismes de récupération de la mémoire
2 Environnement d’exécution
Organisation de la mémoire
Allocation explicite
Allocation implicite
Mécanismes de récupération de la mémoire
2 Environnement d’exécution
Organisation de la mémoire
Allocation explicite
Allocation implicite
Mécanismes de récupération de la mémoire
Pile
↓
..
.
↑
Tas
Données statiques
Code
2 Environnement d’exécution
Organisation de la mémoire
Allocation explicite
Allocation implicite
Mécanismes de récupération de la mémoire
2 Environnement d’exécution
Organisation de la mémoire
Allocation explicite
Allocation implicite
Mécanismes de récupération de la mémoire
Des langages tels que LISP, ML ou JAVA ont choisi la voie de l’allocation
dynamique implicite.
L’exécution va être amenée à allouer de la mémoire
new en Java
constructeurs, fonctions comme résultat en Caml
L’environnement de programmation s’occupe également de récupérer la
mémoire.
C’est le mécanisme de Garbage collector (ramasse-miette, glaneur de
cellules).
2 Environnement d’exécution
Organisation de la mémoire
Allocation explicite
Allocation implicite
Mécanismes de récupération de la mémoire
type l i s t = N i l | Cons of c e l l u l e
and c e l l u l e = { v a l u e : i n t ; mutable n e x t : l i s t }
l e t x = Cons { v a l u e =7; n e x t = N i l }
Nil 1 C 1 7
tas
x
pile
l e t y = Cons { v a l u e =9; n e x t =x }
Nil 2 C 1 7 1 C 1 9
tas
y
x
pile
l e t t = Cons { v a l u e =10; n e x t = y }
Nil 2 C 1 7 2 C 1 9 1 C 1 10
tas
t
y
x
pile
Nil 2 C 2 7 3 C 1 9 1 C 1 10
tas
z
t
y
x
pile
Libération de z
Nil 2 C 1 7 3 C 1 9 1 C 1 10
tas
t
y
x
pile
Libération de t
Nil 2 C 1 7 2 C 1 9 0 C 0 10
tas
y
x
pile
Libération de y
Nil 2 C 1 7 1 C 1 9 0 C 0 10
tas
x
pile
Libération de x
Nil 1 C 1 7 1 C 1 9 0 C 0 10
tas
pile