SlideShare une entreprise Scribd logo
1  sur  72
Télécharger pour lire hors ligne
CodeGen
Présenté par Yann Caron
skyguide
ENSG Géomatique
Plan du cours
Analyse sémantique
Optimisations
Code Generation
Garbage collector
Analyse sémantique
Analyse sémantique
✔ Définition :
✔ Analyse du sens des éléments du
programme
✔ Plusieurs opérations :
✔ Contrôle des types (type checking)
✔ Optimisation locales
✔ Important : Avant l’exécution du
programme
4/72
Algorithmes
✔ La plupart des algorithmes d’analyse
sémantique peuvent être exprimés sous la
forme d’un parcours en profondeur de
l'AST
✔ Pré : traitement du nœud n de l’AST
✔ Récursion : traitement des enfants du
nœud
✔ Post : fin du traitement du nœud
✔ Important : L’optimisation peut s’effectuer
par application successive du même
algorithme (algorithme récurrent)
5/72
Type Checking
✔ Définition d’un type de variable :
✔ Ensemble des valeurs possible d’une
variable
ex : [0-9]+
✔ Ensemble des opérations possibles sur
ces valeurs
ex : +, -, /, *, %
✔ Les Classes sont une notion moderne des
types
ex : Surcharge des opérateurs C++
6/72
Table des symboles
✔ Afin d’effectuer l’analyse des types une
structure de donnée spéciale est
nécessaire
✔ La table des symboles
✔ Trois opérations :
✔ addSymbol : Ajoute les symboles et les
informations tels que le type
✔ findSymbol : Recherche le symbole depuis
le haut de la pile vers le bas (NULL si non
trouvé)
✔ removeSymbol : Supprime l’élément du
haut de la pile 7/72
Stack machine
8/72
{{
int xint x
int yint y
Symbol Table
x (int)
y (int)
x (double)
double xdouble x
Recherche
Masquage
Table des symboles
✔ Cette structure de donnée ne permet pas
de gérer les contextes différents (appel de
fonctions, de méthodes, objets etc..)
✔ Attention, on ne peut pas compter sur les
stack frames (l’analyse intervient avant
l’exécution)
9/72
Table des symboles
✔ Solution :
✔ Rajouter 3 méthodes :
✔ enterScope : Démarre un nouveau
contexte imbriqué
✔ checkScope(x) : vérifie que x soit définit
dans le contexte courant
✔ exitScope : Sort du contexte courant
10/72
Type checking
✔ Analyse la sémantique des types
✔ Vérifie que le programme réponde aux
règles fixées par le typage du langage :
✔ Que la valeur respecte le type / class
✔ Que les opérations soient permises
✔ Que la conversion soit permise
✔ Évalue le masquage
11/72
Type checking
✔ Analyse statique (basée sur la syntaxe
uniquement et non sur le contexte
d’exécution)
✔ Moins flexible, mais plus sûre
✔ Algorithme basé sur un parcours en
profondeur de l’AST
✔ Entretient la table des symboles
12/72
Type checking
13/72
{{int xint x
int yint y
Global scope
x (int)
y (int)
AddSymbol
Démonstration
EnterScope
==
++xx
yy 11
Nested scope 1
Check Assign
Check Operation
Check Type
CheckSymbol
Optimisations
Optimisations
✔ But :
✔ Rendre plus performant le programme
✔ En terme d’utilisation CPU
✔ Exemple : simplifier les calculs
✔ En terme de recherche des symboles
✔ Exemple : remplacer les variables
✔ En terme d’utilisation de la mémoire
15/72
Optimisations
✔ Peu être effectué à plusieurs niveaux :
✔ Sur le code assembleur
✔ Expose les opportunités d’optimisation
✔ Mais est dépendant de la machine
✔ Et doit être réécrit en cas de changement
de machine cible
✔ AST
✔ Indépendant de la machine
✔ Mais de trop haut niveau
16/72
Optimisations
✔ Langage intermédiaire
✔ Expose les opportunités d’optimisations
✔ Et est indépendant de la machine
✔ Meilleur compromis
✔ Notion de bloc
✔ Une suite d’instructions sans label (sauf
1ere ligne) ni renvoi (sauf dernière ligne)
✔ Rien qui pourrait en modifier le flot
d’exécution)
17/72
Optimisation Assembleur
✔ Peephole
✔ Principe : identifier des portions de code
remplaçables par un code plus efficace
✔ La portion doit être un bloc (ni label, ni
renvoi)
✔ Exemple :
✔ addui $a $b 0 move $a $b
✔ move $a $a peut être supprimé
✔ donc addui $a $a 0 peut être supprimé
18/72
Optimisations Locales
✔ S’effectue sur l’AST ou l'IL
✔ Simplification algébrique
✔ Suppression des instructions inutiles
✔ x := x + 0
✔ x := x * 1
✔ Simplification
✔ x := x * 0 x := 0
✔ x:= x ** 2 x:= x * x
19/72
Optimisations Locales
✔ Les opérations sur des constantes peuvent
être résolues lors de la compilation
✔ Une opération de type x := y op z
✔ Si y et z sont des constantes
✔ Alors l’opération peut être résolue lors de
la compilation
✔ Exemple :
✔ x := 2 + 2 x := 4
20/72
Optimisations Locales
✔ Les conditions qui sont toujours fausses
peuvent être supprimées
✔ Exemple : if 2 < 0 jump 0
✔ Les conditions toujours vraies peuvent être
remplacées
✔ Exemple : if 2 > 0 then jump 0 jump0
✔ Règle générale : Supprimer les blocs qui ne
peuvent êtres atteints
21/72
Optimisations Locales
✔ Substituer les opérations
✔ Exemple :
x := y + z
… (sans modification de x, y ou z)
w := y + z w := x
✔ Plus généralement : élimination des
expression communes
22/72
Optimisations Locales
✔ Propagation des copies
✔ Exemple :
b := y + z
a := b
x := 2 * a x := 2 * b
✔ De plus, si a n’est pas utilisé autre part
l’expression a := b pourra être supprimée
23/72
Exemple
a := 5
x := 2 * a
y := x + 6
t := x * y
24/72
a := 5
x := 10
y := 16
t := x * y
t := 160
Optimisations Globales
✔ Analyse du flot d’exécution
✔ Graphe d’exécution
✔ Détection du code jamais exécuté
✔ Propagation des constantes
✔ Analyse des boucles
✔ Dans les langages fonctionnels,
remplacer les récursions par des boucles
✔ Analyse si les variables sont utilisées et s’il
est nécessaire de les calculer
25/72
Algorithme récurrent
✔ Observation : chaque optimisation peut en
révéler une autre
✔ Exemple : la propagation des constantes
peut révéler une condition toujours vraie
26/72
a := 5
if a > 0
print a
else
print “error”
print 5
Algorithme récurrent
✔ Solution :
✔ appliquer toutes les optimisations
✔ recommencer jusqu’à ce que plus aucune
optimisation ne soit possible
27/72
Conclusion
✔ Naïvement on pourrait penser que C++ est
plus performant que Java ou C# (compilé
vs interprété)
✔ Java et C# sont compilés à la volée (JIT)
✔ Le langage intermédiaire permet des
optimisation plus poussées
✔ L’assembleur C++ doit être compatible avec
plusieurs processeurs
✔ Conclusion Java et C# ont de meilleures
performances
28/72
Code Generation
Mémoire d’un programme
✔ Un programme a un espace mémoire fini
✔ Il a besoin de différentes zones :
✔ Sa propre zone, stocke lui même (fixe)
✔ Une zone pour les constantes (fixe)
✔ Une zone pour l’allocation des objets
(variable)
✔ Une zone pour effectuer des calculs ou
stocker les portées (scopes) (variable)
✔ Comment stocker deux zones variables
dans une zone mémoire fixe ?
30/72
Mémoire d’un programme
✔ Code (code
source)
✔ Constantes
✔ Heap (les
objets)
✔ Stack
(scopes)
31/72
Code
Constants / Globals
Heap
(Stockage dynamique)
Stack
(Stockage automatique)
Mémoire d’un programme
✔ La stack représente une pile (filo), l’ordre de
libération de la mémoire est relative à celle
de l’allocation
✔ Contient les variables qui sont libérées
lorsque le programme sort du scope
✔ A contrario, le heap est un espace alloué et
libéré de façon indépendante
✔ Contient les objets créés et libérés
✔ Malloc et free en c, new / gc en java
32/72
Mémoire d’un programme
✔ Lorsqu’il n’y a plus de mémoire possible :
Stack Overflow ou Out of memory (heap)
✔ Stack overflow arrive le plus fréquemment
lors d’appels récursifs qui dépassent la
limite
✔ Out of memory, lorsque les objets
occupent toute la place mémoire
✔ fuite mémoire en C++
✔ liens persistants en Java (GC)
33/72
Stack machine
✔ Basé sur une pile d’exécution
✔ Avantages :
✔ Simplicité d’implémentation
✔ Nombre d’instruction réduit
✔ Code machine généré réduit par rapport
à une machine à registre (code 2x plus
important)
✔ Accès rapide aux opérandes
34/72
Stack machine
35/72
77
++
88
**
33
­­
44 // stack machine opcode
push 7  // 7
push 8  // 7 8
push 3  // 7 8 3
multiply // 7 24
add // 31
push 4 // 31 4
substract // 27
// reverse polish
((7 (8 3 *) +) 5 ­)
Stack machine
36/72
*
3 3 + -
8 8 8 24 24 4 4
7 7 7 7 7 7 31 31 31 27
Temps
// stack machine opcode
push 7  // 7
push 8  // 7 8
push 3  // 7 8 3
multiply // 7 24
add // 31
push 4 // 31 4
substract // 27
// reverse polish
((7 (8 3 *) +) 5 ­)
Stack machine
✔ Inconvénient :
✔ Nécessité de stocker les résultats
intermédiaires en mémoire (coût d’accès)
✔ Nécessite un surcroît d’appel pour stocker
et récupérer les résultats
✔ JVM utilise une modèle hybride avec une
stack et un registre
37/72
Stack machine
38/72
xx
xx
11
==
++
load x
push 1
add
store x
Stack
load x (7)
1
Heap
x = 7
0
50
+
Stack
8
store x (8)
Heap
x = 8
0
50
Register machine
39/72
22
11
44
++
++
store r0, 2
store r1, 4
add
store r1, 1
add
Registre
2
r1
r0
Registre
4
2
r1
r0
Registre
6
r1
r0
Registre
1
6
r1
r0
+
Registre
7
r1
r0
+
Structures de Contrôle
✔ Le langage machine ne connait que 2
instructions de contrôle :
✔ « if » et « goto »
✔ En programmation impérative structurée,
ces instructions ont étés remplacées par
des instructions de plus haut niveau :
✔ for, do / while, repeat / until, if / then / else
40/72
Structures de contrôle
41/72
xx
<<
1010
whilewhile
++++
L0 // test
load x
push 10
jump_if_lt L1
jump L2
L1 // body
load x
push 1
add
store x
jump L1
L2 // exit
xx
Stack Frames
42/72
Démonstration
A = 4
Constants
Stack
call squareOfSum b = 8, ret
squareOfSum
(x = 4, y = 8)
load x
call square x = 4, y = 8, ret
square
(x = 12)
load x
mult
Heap
x = 12
0
50
Portée du programme
43/72
Global
A = 4
square
squareOfSum
main
Global
A = 4
square
squareOfSum
main main
b = 8
squareOfSum
total
main
b = 8
squareOfSum
total
squareOfSum
x = 4, y = 8
z
square
squareOfSum
x = 4, y = 8
z
square
square
x = 12
square
x = 12
Pointeurs
44/72
Constants
Stack
Démonstration
a = 4
*p = 10
Heap
10
0
50
100
p = 50
a = 4
Garbage collector
Garbage collector
✔ La gestion de la désallocation de la
mémoire est automatique en Java
✔ Grâce au ramasse miette (garbage
collector)
✔ La JVM implémente plusieurs algorithmes
46/72
Gestion par Destructeur
✔ Contrairement au langage C++ dont la
gestion s’effectue par le destructeur
✔ A la charge du développeur
✔ Nombreux inconvénients :
✔ Fastidieux
✔ Risque de fuites mémoire
✔ Risque d’appel d’éléments détruits
✔ Risque de désallocations multiples
47/72
Algorithmes
✔ Reference counting
✔ Pose problèmes
✔ Mark and sweep
✔ Utilisé par la JVM
✔ Tri-color marking
48/72
Reference Counting
✔ Principe :
✔ Pour chaque objet, un compteur est
entretenu
✔ Incrémenté en cas d’une nouvelle
référence
✔ Décrémenté en cas de destruction d’un
parent (parcours en profondeur du
graphe)
✔ Quand le compteur est à 0, l’objet peut
être détruit
49/72
Reference Counting
50/72
Objet 1 (2)
Objet 2 (1)
Objet 3 (1)
Objet 4 (1) Objet 5 (0)
Objet 6 (1)
Objet 8 (2)
Objet 9 (1)
Objet 7 (0)
Reference Counting
51/72
Objet 1 (2)
Objet 2 (1)
Objet 3 (1)
Objet 4 (1) Objet 5 (0)
Objet 6 (1)
Objet 8 (1)
Objet 9 (1)
Objet 7 (0)
Référence
cyclique
Reference Counting
✔ Avantages :
✔ Mis à jour en temps réel
✔ Complexité et coûts mémoire faibles
✔ Inconvénients :
✔ Cas des références cycliques (des objets
se référençant mutuellement)
52/72
Mark and Sweep
✔ Principe :
✔ Nécessite un flag booléen par objet
✔ Étape 1 : Parcours en profondeur de
l’arbre et marquage des objets utilisés
✔ Étape 2 : Suppression des objets non
marqués
✔ Étape 3 : Nettoyage des flags
53/72
Mark and Sweep
54/72
Objet 1
Objet 2
Objet 3
Objet 4 Objet 5
Objet 6
Objet 8
Objet 9
Objet 7
Mark and Sweep
55/72
Objet 1
Objet 2
Objet 3
Objet 4 Objet 5
Objet 6
Objet 8
Objet 9
Objet 7
Mark and Sweep
56/72
Objet 1
Objet 2
Objet 3
Objet 4 Objet 5
Objet 6
Objet 8
Objet 9
Objet 7
Mark and Sweep
57/72
Objet 1
Objet 2
Objet 3
Objet 4 Objet 5
Objet 6
Objet 8
Objet 9
Objet 7
Mark and Sweep
58/72
Objet 1
Objet 2
Objet 3
Objet 4 Objet 5
Objet 6
Objet 8
Objet 9
Objet 7
Mark and Sweep
✔ Avantages :
✔ Élimination des références circulaires
✔ Inconvénients :
✔ Ne détecte pas si l’objet est dans du code
inaccessible (peu important)
✔ Nécessite un arrêt des accès mémoire
(stop the world) → rends les applications
« temps réel » ou « time critical »
impossibles
59/72
Mark and Sweep
60/72
Objet 1
Objet 2
Objet 3
Objet 4 Objet 5
Objet 6
Objet 8
Objet 9
Objet 7
Objet 10
Objet créée en parallèle
sera supprimé
Tri-color marking
✔ Principe :
✔ Trois ensembles sont nécessaires
✔ Blanc contient tous les objets à évaluer
✔ Noir, objets qui n’ont pas de lien vers un
objet de l’ensemble blanc et qui sont
atteignables depuis la racine (non
candidats à la collection)
✔ Gris, objets atteignables depuis la racine
mais dont les liens n’ont pas encore été
évalués
61/72
Tri-color marking
62/72
Objet 1
Objet 2
Objet 3
Objet 4 Objet 5
Objet 6
Objet 8
Objet 9
Objet 7
Blanc
Gris
Noir
1 2
3 4 5 6
7 8 9
Tri-color marking
63/72
Objet 1
Objet 2
Objet 3
Objet 4 Objet 5
Objet 6
Objet 8
Objet 9
Objet 7
Blanc
Gris
Noir
2 3
4 5 7 8
9
1 6
Tri-color marking
64/72
Objet 1
Objet 2
Objet 3
Objet 4 Objet 5
Objet 6
Objet 8
Objet 9
Objet 7
Blanc
Gris
Noir
2 3 4
5 7 8 9
1 6
Tri-color marking
65/72
Objet 1
Objet 2
Objet 3
Objet 4 Objet 5
Objet 6
Objet 8
Objet 9
Objet 7
Blanc
Gris
Noir
2 3
4
5 7 8 9
1 6
Tri-color marking
✔ Principe :
✔ L’ensemble blanc fige l’espace de travail
✔ En cas de génération de nouveaux objets
durant l’exécution, ils ne seront pas pris
en compte
✔ Si des objets sont déréférencés durant
l’exécution, ils seront évalués à la
prochaine exécution
✔ L’ensemble gris sert à décider si
l’algorithme a fini (lorsqu’il est vide)
66/72
Tri-color marking
✔ Les objets ne peuvent être déplacés que
du blanc vers le gris et du gris vers le noir
✔ Comme aucun objet noir ne peut
référencer un objet blanc, une fois que
l’ensemble gris est vide les objets peuvent
êtres supprimés
✔ Avantage :
✔ Élimination des références circulaires
✔ Peut être exécuté en parallèle du
programme
67/72
Moving vs Non-Moving
✔ Après la collection des objets
inaccessibles, les objets restants peuvent
rester sur place
✔ Ou être recopiés dans une nouvelle zone
mémoire
✔ But : éviter la fragmentation de la mémoire
avec des zones vides
✔ Désavantages :
✔ Coût de la copie
✔ Ne permet plus l’arithmétique de
pointeurs 68/72
Moving
69/72
Objet 1
Objet 2
Objet 3
Objet 4 Objet 5
Objet 9
Objet 7
Objet 8
Objet 6
Moving
70/72
Objet 1
Objet 2
Objet 3
Objet 4
Objet 9
Stop the world vs Concurrent
✔ Les algorithmes Stop the world,
suspendent l’exécution du programme lors
de la collection
✔ Posent des problèmes de performance
✔ Rendent impossible les programmes
Temps réel
✔ Les algorithmes Concurrents rendent
possible la collection sans que le
programme ne soit suspendu
71/72
Merci de votre attention

Contenu connexe

Tendances

Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)rezgui mohamed
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieLoic Yon
 
Langage C
Langage  CLangage  C
Langage Cjwilili
 
Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en cbenouini rachid
 
C3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partieC3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partieLoic Yon
 
Tp1 compte rendu en langage c
Tp1 compte rendu en langage cTp1 compte rendu en langage c
Tp1 compte rendu en langage cEbrima NJIE
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018salah fenni
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage Ccoursuniv
 
Interception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelInterception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelThierry Gayet
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018salah fenni
 
Seance 1 - Programmation en langage C
Seance 1 - Programmation en langage CSeance 1 - Programmation en langage C
Seance 1 - Programmation en langage CFahad Golra
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Laurent BUNIET
 
Exercices en langage c
Exercices en langage cExercices en langage c
Exercices en langage cDaoua Lotfi
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzlesMicrosoft
 
Exercices pascal tous les chapitres
Exercices pascal tous les chapitresExercices pascal tous les chapitres
Exercices pascal tous les chapitresborhen boukthir
 

Tendances (20)

Theme2
Theme2Theme2
Theme2
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partie
 
Langage C
Langage  CLangage  C
Langage C
 
Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en c
 
C3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partieC3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partie
 
Tp1 compte rendu en langage c
Tp1 compte rendu en langage cTp1 compte rendu en langage c
Tp1 compte rendu en langage c
 
Cours langage-c
Cours langage-cCours langage-c
Cours langage-c
 
Chapitre2 prog dsplf3
Chapitre2 prog dsplf3Chapitre2 prog dsplf3
Chapitre2 prog dsplf3
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage C
 
Le langage C
Le langage CLe langage C
Le langage C
 
Interception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelInterception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appel
 
Programmation en C
Programmation en CProgrammation en C
Programmation en C
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018
 
Seance 1 - Programmation en langage C
Seance 1 - Programmation en langage CSeance 1 - Programmation en langage C
Seance 1 - Programmation en langage C
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5
 
Exercices en langage c
Exercices en langage cExercices en langage c
Exercices en langage c
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
Exercices pascal tous les chapitres
Exercices pascal tous les chapitresExercices pascal tous les chapitres
Exercices pascal tous les chapitres
 

Similaire à Théorie des langages - 02 - Code gen

Théorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesThéorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesYann Caron
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCChristophe Villeneuve
 
PAUG 03/05/2016 : Android Studio Rappels
PAUG 03/05/2016 : Android Studio RappelsPAUG 03/05/2016 : Android Studio Rappels
PAUG 03/05/2016 : Android Studio RappelsJacques GIRAUDEL
 
Les containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicienLes containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicienRachid Zarouali
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx FranceMarc Bojoly
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Gitmsadouni
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceOCTO Technology
 
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsTest Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsThierry Gayet
 
chapitre 1 programmation linéaire.pdf
chapitre 1 programmation linéaire.pdfchapitre 1 programmation linéaire.pdf
chapitre 1 programmation linéaire.pdfolfaharrabi2
 
Monitoring d'applications/environnements PHP : APM et Pinba
Monitoring d'applications/environnements PHP : APM et PinbaMonitoring d'applications/environnements PHP : APM et Pinba
Monitoring d'applications/environnements PHP : APM et PinbaIdaf_1er
 
Implémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesImplémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesGeeks Anonymes
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introductionneuros
 

Similaire à Théorie des langages - 02 - Code gen (20)

Théorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmesThéorie des langages - 03 - Principes et paradigmes
Théorie des langages - 03 - Principes et paradigmes
 
Boost.SIMD
Boost.SIMDBoost.SIMD
Boost.SIMD
 
Formation VBA Excel
Formation VBA ExcelFormation VBA Excel
Formation VBA Excel
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
 
Perf university
Perf universityPerf university
Perf university
 
PAUG 03/05/2016 : Android Studio Rappels
PAUG 03/05/2016 : Android Studio RappelsPAUG 03/05/2016 : Android Studio Rappels
PAUG 03/05/2016 : Android Studio Rappels
 
Les containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicienLes containers docker vu par un chef cuisinier et un mécanicien
Les containers docker vu par un chef cuisinier et un mécanicien
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx France
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Git
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Les bases de git
Les bases de gitLes bases de git
Les bases de git
 
Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquence
 
Test Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teamsTest Driven Development (aka TDD) for agile teams
Test Driven Development (aka TDD) for agile teams
 
chapitre 1 programmation linéaire.pdf
chapitre 1 programmation linéaire.pdfchapitre 1 programmation linéaire.pdf
chapitre 1 programmation linéaire.pdf
 
Monitoring d'applications/environnements PHP : APM et Pinba
Monitoring d'applications/environnements PHP : APM et PinbaMonitoring d'applications/environnements PHP : APM et Pinba
Monitoring d'applications/environnements PHP : APM et Pinba
 
Implémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexesImplémentation efficace et durable de processus métiers complexes
Implémentation efficace et durable de processus métiers complexes
 
Tsung GIS
Tsung GISTsung GIS
Tsung GIS
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 

Plus de Yann Caron

Théorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langagesThéorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langagesYann Caron
 
Théorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbresThéorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbresYann Caron
 
Théorie des langages - 00 - Introduction
Théorie des langages - 00 - IntroductionThéorie des langages - 00 - Introduction
Théorie des langages - 00 - IntroductionYann Caron
 
Algea - 04 - conclusion
Algea - 04 - conclusionAlgea - 04 - conclusion
Algea - 04 - conclusionYann Caron
 
Algea - 03 - ennemis
Algea - 03 - ennemisAlgea - 03 - ennemis
Algea - 03 - ennemisYann Caron
 
Algea - 02 - gemmes
Algea - 02 - gemmesAlgea - 02 - gemmes
Algea - 02 - gemmesYann Caron
 
Algea - 01 - hero
Algea - 01 - heroAlgea - 01 - hero
Algea - 01 - heroYann Caron
 
ALGEA - 00 - introduction
ALGEA - 00 - introductionALGEA - 00 - introduction
ALGEA - 00 - introductionYann Caron
 
Programmation Android - Tp2 Travaux pratiques - Geomatique
Programmation Android - Tp2 Travaux pratiques - GeomatiqueProgrammation Android - Tp2 Travaux pratiques - Geomatique
Programmation Android - Tp2 Travaux pratiques - GeomatiqueYann Caron
 
Programmation Android - 10 - Spatialite
Programmation Android - 10 - SpatialiteProgrammation Android - 10 - Spatialite
Programmation Android - 10 - SpatialiteYann Caron
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web servicesYann Caron
 
Programmation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridgeProgrammation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridgeYann Caron
 
Programmation Android 07 - Techniques avancées
Programmation Android 07 - Techniques avancéesProgrammation Android 07 - Techniques avancées
Programmation Android 07 - Techniques avancéesYann Caron
 
Programmation Android - 06 - Publication
Programmation Android - 06 - PublicationProgrammation Android - 06 - Publication
Programmation Android - 06 - PublicationYann Caron
 
Programmation Android - 05 - Google map
Programmation Android - 05 - Google mapProgrammation Android - 05 - Google map
Programmation Android - 05 - Google mapYann Caron
 
Programmation Android - 04 - Databases
Programmation Android - 04 - DatabasesProgrammation Android - 04 - Databases
Programmation Android - 04 - DatabasesYann Caron
 
Programmation Android - 03 - IHM bases
Programmation Android - 03 - IHM basesProgrammation Android - 03 - IHM bases
Programmation Android - 03 - IHM basesYann Caron
 
Programmation Android - 02 - Android
Programmation Android - 02 - AndroidProgrammation Android - 02 - Android
Programmation Android - 02 - AndroidYann Caron
 
Programmation Android - 01 - Introduction
Programmation Android - 01 - IntroductionProgrammation Android - 01 - Introduction
Programmation Android - 01 - IntroductionYann Caron
 
Programmation Android - 00 - Présentation
Programmation Android - 00 - PrésentationProgrammation Android - 00 - Présentation
Programmation Android - 00 - PrésentationYann Caron
 

Plus de Yann Caron (20)

Théorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langagesThéorie des langages - 04 Théorie des langages
Théorie des langages - 04 Théorie des langages
 
Théorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbresThéorie des langages - 01.1 - Parcours d'arbres
Théorie des langages - 01.1 - Parcours d'arbres
 
Théorie des langages - 00 - Introduction
Théorie des langages - 00 - IntroductionThéorie des langages - 00 - Introduction
Théorie des langages - 00 - Introduction
 
Algea - 04 - conclusion
Algea - 04 - conclusionAlgea - 04 - conclusion
Algea - 04 - conclusion
 
Algea - 03 - ennemis
Algea - 03 - ennemisAlgea - 03 - ennemis
Algea - 03 - ennemis
 
Algea - 02 - gemmes
Algea - 02 - gemmesAlgea - 02 - gemmes
Algea - 02 - gemmes
 
Algea - 01 - hero
Algea - 01 - heroAlgea - 01 - hero
Algea - 01 - hero
 
ALGEA - 00 - introduction
ALGEA - 00 - introductionALGEA - 00 - introduction
ALGEA - 00 - introduction
 
Programmation Android - Tp2 Travaux pratiques - Geomatique
Programmation Android - Tp2 Travaux pratiques - GeomatiqueProgrammation Android - Tp2 Travaux pratiques - Geomatique
Programmation Android - Tp2 Travaux pratiques - Geomatique
 
Programmation Android - 10 - Spatialite
Programmation Android - 10 - SpatialiteProgrammation Android - 10 - Spatialite
Programmation Android - 10 - Spatialite
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
 
Programmation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridgeProgrammation Android - 08 - Android debug bridge
Programmation Android - 08 - Android debug bridge
 
Programmation Android 07 - Techniques avancées
Programmation Android 07 - Techniques avancéesProgrammation Android 07 - Techniques avancées
Programmation Android 07 - Techniques avancées
 
Programmation Android - 06 - Publication
Programmation Android - 06 - PublicationProgrammation Android - 06 - Publication
Programmation Android - 06 - Publication
 
Programmation Android - 05 - Google map
Programmation Android - 05 - Google mapProgrammation Android - 05 - Google map
Programmation Android - 05 - Google map
 
Programmation Android - 04 - Databases
Programmation Android - 04 - DatabasesProgrammation Android - 04 - Databases
Programmation Android - 04 - Databases
 
Programmation Android - 03 - IHM bases
Programmation Android - 03 - IHM basesProgrammation Android - 03 - IHM bases
Programmation Android - 03 - IHM bases
 
Programmation Android - 02 - Android
Programmation Android - 02 - AndroidProgrammation Android - 02 - Android
Programmation Android - 02 - Android
 
Programmation Android - 01 - Introduction
Programmation Android - 01 - IntroductionProgrammation Android - 01 - Introduction
Programmation Android - 01 - Introduction
 
Programmation Android - 00 - Présentation
Programmation Android - 00 - PrésentationProgrammation Android - 00 - Présentation
Programmation Android - 00 - Présentation
 

Dernier

Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...maach1
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)Sana REFAI
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...Institut de l'Elevage - Idele
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfmia884611
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfInstitut de l'Elevage - Idele
 
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSKennel
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).FatimaEzzahra753100
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfInstitut de l'Elevage - Idele
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfInstitut de l'Elevage - Idele
 

Dernier (11)

Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
 
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdfJTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdf
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdf
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdf
 
CAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptxCAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptx
 

Théorie des langages - 02 - Code gen

  • 1. CodeGen Présenté par Yann Caron skyguide ENSG Géomatique
  • 2. Plan du cours Analyse sémantique Optimisations Code Generation Garbage collector
  • 4. Analyse sémantique ✔ Définition : ✔ Analyse du sens des éléments du programme ✔ Plusieurs opérations : ✔ Contrôle des types (type checking) ✔ Optimisation locales ✔ Important : Avant l’exécution du programme 4/72
  • 5. Algorithmes ✔ La plupart des algorithmes d’analyse sémantique peuvent être exprimés sous la forme d’un parcours en profondeur de l'AST ✔ Pré : traitement du nœud n de l’AST ✔ Récursion : traitement des enfants du nœud ✔ Post : fin du traitement du nœud ✔ Important : L’optimisation peut s’effectuer par application successive du même algorithme (algorithme récurrent) 5/72
  • 6. Type Checking ✔ Définition d’un type de variable : ✔ Ensemble des valeurs possible d’une variable ex : [0-9]+ ✔ Ensemble des opérations possibles sur ces valeurs ex : +, -, /, *, % ✔ Les Classes sont une notion moderne des types ex : Surcharge des opérateurs C++ 6/72
  • 7. Table des symboles ✔ Afin d’effectuer l’analyse des types une structure de donnée spéciale est nécessaire ✔ La table des symboles ✔ Trois opérations : ✔ addSymbol : Ajoute les symboles et les informations tels que le type ✔ findSymbol : Recherche le symbole depuis le haut de la pile vers le bas (NULL si non trouvé) ✔ removeSymbol : Supprime l’élément du haut de la pile 7/72
  • 8. Stack machine 8/72 {{ int xint x int yint y Symbol Table x (int) y (int) x (double) double xdouble x Recherche Masquage
  • 9. Table des symboles ✔ Cette structure de donnée ne permet pas de gérer les contextes différents (appel de fonctions, de méthodes, objets etc..) ✔ Attention, on ne peut pas compter sur les stack frames (l’analyse intervient avant l’exécution) 9/72
  • 10. Table des symboles ✔ Solution : ✔ Rajouter 3 méthodes : ✔ enterScope : Démarre un nouveau contexte imbriqué ✔ checkScope(x) : vérifie que x soit définit dans le contexte courant ✔ exitScope : Sort du contexte courant 10/72
  • 11. Type checking ✔ Analyse la sémantique des types ✔ Vérifie que le programme réponde aux règles fixées par le typage du langage : ✔ Que la valeur respecte le type / class ✔ Que les opérations soient permises ✔ Que la conversion soit permise ✔ Évalue le masquage 11/72
  • 12. Type checking ✔ Analyse statique (basée sur la syntaxe uniquement et non sur le contexte d’exécution) ✔ Moins flexible, mais plus sûre ✔ Algorithme basé sur un parcours en profondeur de l’AST ✔ Entretient la table des symboles 12/72
  • 13. Type checking 13/72 {{int xint x int yint y Global scope x (int) y (int) AddSymbol Démonstration EnterScope == ++xx yy 11 Nested scope 1 Check Assign Check Operation Check Type CheckSymbol
  • 15. Optimisations ✔ But : ✔ Rendre plus performant le programme ✔ En terme d’utilisation CPU ✔ Exemple : simplifier les calculs ✔ En terme de recherche des symboles ✔ Exemple : remplacer les variables ✔ En terme d’utilisation de la mémoire 15/72
  • 16. Optimisations ✔ Peu être effectué à plusieurs niveaux : ✔ Sur le code assembleur ✔ Expose les opportunités d’optimisation ✔ Mais est dépendant de la machine ✔ Et doit être réécrit en cas de changement de machine cible ✔ AST ✔ Indépendant de la machine ✔ Mais de trop haut niveau 16/72
  • 17. Optimisations ✔ Langage intermédiaire ✔ Expose les opportunités d’optimisations ✔ Et est indépendant de la machine ✔ Meilleur compromis ✔ Notion de bloc ✔ Une suite d’instructions sans label (sauf 1ere ligne) ni renvoi (sauf dernière ligne) ✔ Rien qui pourrait en modifier le flot d’exécution) 17/72
  • 18. Optimisation Assembleur ✔ Peephole ✔ Principe : identifier des portions de code remplaçables par un code plus efficace ✔ La portion doit être un bloc (ni label, ni renvoi) ✔ Exemple : ✔ addui $a $b 0 move $a $b ✔ move $a $a peut être supprimé ✔ donc addui $a $a 0 peut être supprimé 18/72
  • 19. Optimisations Locales ✔ S’effectue sur l’AST ou l'IL ✔ Simplification algébrique ✔ Suppression des instructions inutiles ✔ x := x + 0 ✔ x := x * 1 ✔ Simplification ✔ x := x * 0 x := 0 ✔ x:= x ** 2 x:= x * x 19/72
  • 20. Optimisations Locales ✔ Les opérations sur des constantes peuvent être résolues lors de la compilation ✔ Une opération de type x := y op z ✔ Si y et z sont des constantes ✔ Alors l’opération peut être résolue lors de la compilation ✔ Exemple : ✔ x := 2 + 2 x := 4 20/72
  • 21. Optimisations Locales ✔ Les conditions qui sont toujours fausses peuvent être supprimées ✔ Exemple : if 2 < 0 jump 0 ✔ Les conditions toujours vraies peuvent être remplacées ✔ Exemple : if 2 > 0 then jump 0 jump0 ✔ Règle générale : Supprimer les blocs qui ne peuvent êtres atteints 21/72
  • 22. Optimisations Locales ✔ Substituer les opérations ✔ Exemple : x := y + z … (sans modification de x, y ou z) w := y + z w := x ✔ Plus généralement : élimination des expression communes 22/72
  • 23. Optimisations Locales ✔ Propagation des copies ✔ Exemple : b := y + z a := b x := 2 * a x := 2 * b ✔ De plus, si a n’est pas utilisé autre part l’expression a := b pourra être supprimée 23/72
  • 24. Exemple a := 5 x := 2 * a y := x + 6 t := x * y 24/72 a := 5 x := 10 y := 16 t := x * y t := 160
  • 25. Optimisations Globales ✔ Analyse du flot d’exécution ✔ Graphe d’exécution ✔ Détection du code jamais exécuté ✔ Propagation des constantes ✔ Analyse des boucles ✔ Dans les langages fonctionnels, remplacer les récursions par des boucles ✔ Analyse si les variables sont utilisées et s’il est nécessaire de les calculer 25/72
  • 26. Algorithme récurrent ✔ Observation : chaque optimisation peut en révéler une autre ✔ Exemple : la propagation des constantes peut révéler une condition toujours vraie 26/72 a := 5 if a > 0 print a else print “error” print 5
  • 27. Algorithme récurrent ✔ Solution : ✔ appliquer toutes les optimisations ✔ recommencer jusqu’à ce que plus aucune optimisation ne soit possible 27/72
  • 28. Conclusion ✔ Naïvement on pourrait penser que C++ est plus performant que Java ou C# (compilé vs interprété) ✔ Java et C# sont compilés à la volée (JIT) ✔ Le langage intermédiaire permet des optimisation plus poussées ✔ L’assembleur C++ doit être compatible avec plusieurs processeurs ✔ Conclusion Java et C# ont de meilleures performances 28/72
  • 30. Mémoire d’un programme ✔ Un programme a un espace mémoire fini ✔ Il a besoin de différentes zones : ✔ Sa propre zone, stocke lui même (fixe) ✔ Une zone pour les constantes (fixe) ✔ Une zone pour l’allocation des objets (variable) ✔ Une zone pour effectuer des calculs ou stocker les portées (scopes) (variable) ✔ Comment stocker deux zones variables dans une zone mémoire fixe ? 30/72
  • 31. Mémoire d’un programme ✔ Code (code source) ✔ Constantes ✔ Heap (les objets) ✔ Stack (scopes) 31/72 Code Constants / Globals Heap (Stockage dynamique) Stack (Stockage automatique)
  • 32. Mémoire d’un programme ✔ La stack représente une pile (filo), l’ordre de libération de la mémoire est relative à celle de l’allocation ✔ Contient les variables qui sont libérées lorsque le programme sort du scope ✔ A contrario, le heap est un espace alloué et libéré de façon indépendante ✔ Contient les objets créés et libérés ✔ Malloc et free en c, new / gc en java 32/72
  • 33. Mémoire d’un programme ✔ Lorsqu’il n’y a plus de mémoire possible : Stack Overflow ou Out of memory (heap) ✔ Stack overflow arrive le plus fréquemment lors d’appels récursifs qui dépassent la limite ✔ Out of memory, lorsque les objets occupent toute la place mémoire ✔ fuite mémoire en C++ ✔ liens persistants en Java (GC) 33/72
  • 34. Stack machine ✔ Basé sur une pile d’exécution ✔ Avantages : ✔ Simplicité d’implémentation ✔ Nombre d’instruction réduit ✔ Code machine généré réduit par rapport à une machine à registre (code 2x plus important) ✔ Accès rapide aux opérandes 34/72
  • 35. Stack machine 35/72 77 ++ 88 ** 33 ­­ 44 // stack machine opcode push 7  // 7 push 8  // 7 8 push 3  // 7 8 3 multiply // 7 24 add // 31 push 4 // 31 4 substract // 27 // reverse polish ((7 (8 3 *) +) 5 ­)
  • 36. Stack machine 36/72 * 3 3 + - 8 8 8 24 24 4 4 7 7 7 7 7 7 31 31 31 27 Temps // stack machine opcode push 7  // 7 push 8  // 7 8 push 3  // 7 8 3 multiply // 7 24 add // 31 push 4 // 31 4 substract // 27 // reverse polish ((7 (8 3 *) +) 5 ­)
  • 37. Stack machine ✔ Inconvénient : ✔ Nécessité de stocker les résultats intermédiaires en mémoire (coût d’accès) ✔ Nécessite un surcroît d’appel pour stocker et récupérer les résultats ✔ JVM utilise une modèle hybride avec une stack et un registre 37/72
  • 38. Stack machine 38/72 xx xx 11 == ++ load x push 1 add store x Stack load x (7) 1 Heap x = 7 0 50 + Stack 8 store x (8) Heap x = 8 0 50
  • 40. Structures de Contrôle ✔ Le langage machine ne connait que 2 instructions de contrôle : ✔ « if » et « goto » ✔ En programmation impérative structurée, ces instructions ont étés remplacées par des instructions de plus haut niveau : ✔ for, do / while, repeat / until, if / then / else 40/72
  • 42. Stack Frames 42/72 Démonstration A = 4 Constants Stack call squareOfSum b = 8, ret squareOfSum (x = 4, y = 8) load x call square x = 4, y = 8, ret square (x = 12) load x mult Heap x = 12 0 50
  • 43. Portée du programme 43/72 Global A = 4 square squareOfSum main Global A = 4 square squareOfSum main main b = 8 squareOfSum total main b = 8 squareOfSum total squareOfSum x = 4, y = 8 z square squareOfSum x = 4, y = 8 z square square x = 12 square x = 12
  • 44. Pointeurs 44/72 Constants Stack Démonstration a = 4 *p = 10 Heap 10 0 50 100 p = 50 a = 4
  • 46. Garbage collector ✔ La gestion de la désallocation de la mémoire est automatique en Java ✔ Grâce au ramasse miette (garbage collector) ✔ La JVM implémente plusieurs algorithmes 46/72
  • 47. Gestion par Destructeur ✔ Contrairement au langage C++ dont la gestion s’effectue par le destructeur ✔ A la charge du développeur ✔ Nombreux inconvénients : ✔ Fastidieux ✔ Risque de fuites mémoire ✔ Risque d’appel d’éléments détruits ✔ Risque de désallocations multiples 47/72
  • 48. Algorithmes ✔ Reference counting ✔ Pose problèmes ✔ Mark and sweep ✔ Utilisé par la JVM ✔ Tri-color marking 48/72
  • 49. Reference Counting ✔ Principe : ✔ Pour chaque objet, un compteur est entretenu ✔ Incrémenté en cas d’une nouvelle référence ✔ Décrémenté en cas de destruction d’un parent (parcours en profondeur du graphe) ✔ Quand le compteur est à 0, l’objet peut être détruit 49/72
  • 50. Reference Counting 50/72 Objet 1 (2) Objet 2 (1) Objet 3 (1) Objet 4 (1) Objet 5 (0) Objet 6 (1) Objet 8 (2) Objet 9 (1) Objet 7 (0)
  • 51. Reference Counting 51/72 Objet 1 (2) Objet 2 (1) Objet 3 (1) Objet 4 (1) Objet 5 (0) Objet 6 (1) Objet 8 (1) Objet 9 (1) Objet 7 (0) Référence cyclique
  • 52. Reference Counting ✔ Avantages : ✔ Mis à jour en temps réel ✔ Complexité et coûts mémoire faibles ✔ Inconvénients : ✔ Cas des références cycliques (des objets se référençant mutuellement) 52/72
  • 53. Mark and Sweep ✔ Principe : ✔ Nécessite un flag booléen par objet ✔ Étape 1 : Parcours en profondeur de l’arbre et marquage des objets utilisés ✔ Étape 2 : Suppression des objets non marqués ✔ Étape 3 : Nettoyage des flags 53/72
  • 54. Mark and Sweep 54/72 Objet 1 Objet 2 Objet 3 Objet 4 Objet 5 Objet 6 Objet 8 Objet 9 Objet 7
  • 55. Mark and Sweep 55/72 Objet 1 Objet 2 Objet 3 Objet 4 Objet 5 Objet 6 Objet 8 Objet 9 Objet 7
  • 56. Mark and Sweep 56/72 Objet 1 Objet 2 Objet 3 Objet 4 Objet 5 Objet 6 Objet 8 Objet 9 Objet 7
  • 57. Mark and Sweep 57/72 Objet 1 Objet 2 Objet 3 Objet 4 Objet 5 Objet 6 Objet 8 Objet 9 Objet 7
  • 58. Mark and Sweep 58/72 Objet 1 Objet 2 Objet 3 Objet 4 Objet 5 Objet 6 Objet 8 Objet 9 Objet 7
  • 59. Mark and Sweep ✔ Avantages : ✔ Élimination des références circulaires ✔ Inconvénients : ✔ Ne détecte pas si l’objet est dans du code inaccessible (peu important) ✔ Nécessite un arrêt des accès mémoire (stop the world) → rends les applications « temps réel » ou « time critical » impossibles 59/72
  • 60. Mark and Sweep 60/72 Objet 1 Objet 2 Objet 3 Objet 4 Objet 5 Objet 6 Objet 8 Objet 9 Objet 7 Objet 10 Objet créée en parallèle sera supprimé
  • 61. Tri-color marking ✔ Principe : ✔ Trois ensembles sont nécessaires ✔ Blanc contient tous les objets à évaluer ✔ Noir, objets qui n’ont pas de lien vers un objet de l’ensemble blanc et qui sont atteignables depuis la racine (non candidats à la collection) ✔ Gris, objets atteignables depuis la racine mais dont les liens n’ont pas encore été évalués 61/72
  • 62. Tri-color marking 62/72 Objet 1 Objet 2 Objet 3 Objet 4 Objet 5 Objet 6 Objet 8 Objet 9 Objet 7 Blanc Gris Noir 1 2 3 4 5 6 7 8 9
  • 63. Tri-color marking 63/72 Objet 1 Objet 2 Objet 3 Objet 4 Objet 5 Objet 6 Objet 8 Objet 9 Objet 7 Blanc Gris Noir 2 3 4 5 7 8 9 1 6
  • 64. Tri-color marking 64/72 Objet 1 Objet 2 Objet 3 Objet 4 Objet 5 Objet 6 Objet 8 Objet 9 Objet 7 Blanc Gris Noir 2 3 4 5 7 8 9 1 6
  • 65. Tri-color marking 65/72 Objet 1 Objet 2 Objet 3 Objet 4 Objet 5 Objet 6 Objet 8 Objet 9 Objet 7 Blanc Gris Noir 2 3 4 5 7 8 9 1 6
  • 66. Tri-color marking ✔ Principe : ✔ L’ensemble blanc fige l’espace de travail ✔ En cas de génération de nouveaux objets durant l’exécution, ils ne seront pas pris en compte ✔ Si des objets sont déréférencés durant l’exécution, ils seront évalués à la prochaine exécution ✔ L’ensemble gris sert à décider si l’algorithme a fini (lorsqu’il est vide) 66/72
  • 67. Tri-color marking ✔ Les objets ne peuvent être déplacés que du blanc vers le gris et du gris vers le noir ✔ Comme aucun objet noir ne peut référencer un objet blanc, une fois que l’ensemble gris est vide les objets peuvent êtres supprimés ✔ Avantage : ✔ Élimination des références circulaires ✔ Peut être exécuté en parallèle du programme 67/72
  • 68. Moving vs Non-Moving ✔ Après la collection des objets inaccessibles, les objets restants peuvent rester sur place ✔ Ou être recopiés dans une nouvelle zone mémoire ✔ But : éviter la fragmentation de la mémoire avec des zones vides ✔ Désavantages : ✔ Coût de la copie ✔ Ne permet plus l’arithmétique de pointeurs 68/72
  • 69. Moving 69/72 Objet 1 Objet 2 Objet 3 Objet 4 Objet 5 Objet 9 Objet 7 Objet 8 Objet 6
  • 71. Stop the world vs Concurrent ✔ Les algorithmes Stop the world, suspendent l’exécution du programme lors de la collection ✔ Posent des problèmes de performance ✔ Rendent impossible les programmes Temps réel ✔ Les algorithmes Concurrents rendent possible la collection sans que le programme ne soit suspendu 71/72
  • 72. Merci de votre attention