Sommaire Définition du langage d’expérimentation Compilateur pour le langage Z minimal Extensions du langage Z minimal
Chapitre précédent Chapitre 5 : Organisation de la mémoire Chapitre suivant
5.1 Introduction
Au moment de la compilation, nous devons attribuer un emplacement mémoire à tout objet du programme. Cela donc revient à définir un mécanisme d’adressage. C’est la phase sémantique qui est chargée de l’attribution des adresses aux variables.
D’une manière générale, un objet peut être une variable simple, tableau, structure (ou enregistrement), …
Pour notre cas (langage Z minimal), l’objet ne peut être qu’une variable entière.
5.2 Zone de données
A toute procédure est associée une zone de données. Cette dernière contient l’ensemble des objets déclarés dans le module ( variables locales, variables temporaires, …) .
La zone de données est un ensemble de mots mémoire (tableau) .
Pour notre cas, un mot mémoire de la zone de données représente une variable déclarée ou un temporaire).
Attention :
- L’espace pour la zone de données n’existe pas au moment de la compilation.
- Par contre, sa longueur sera connue en fin de compilation.
- Il est alloué au moment de l’exécution quand la procédure est appelée.
5.3 Mode d’allocation
En général il existe deux types d’allocation:
- Allocation statique
Chaque mot mémoire contiendra à l’exécution la valeur de la variable.
- Allocation dynamique
Chaque mot mémoire contiendra à l’exécution l’adresse de la variable.
L’allocation de l’espace pour la variable se fera quand le module est appelé.
Pour notre cas, on optera pour l’allocation dynamique.
Exemple
La figure 1 montre l’image de la zone de données en fin de compilation. La zone de données n’existe pas au moment de la compilation mais aura à l’exécution l’image mentionnée dans la figure.
Figure 1: Zone de données (en fin de compilation )
La figure 2 montre le contenu de la zone de données après la déclaration de la variable A. Il y a allocation d’un espace pour la variable A. L’adresse de cet espace est rangée dans la zone de données.
Figure 2: Zone de données (après déclaration de A )
La figure 3 montre le contenu de la zone de données à l’exécution avant l’affectation avant l’affectation A := 3. Il y a allocation d’espaces pour les variables A, B et C. Leurs adresses son rangées dans la zone de données.
Figure 3: Zone de données (avant A:=3)
La figure 4 montre le contenu de la zone de données à l’exécution après B := 5. Les valeurs 3 et 5 sont affectées aux variables A et B.
Figure 4: Zone de données (après B:=5)
Enfin, la figure 5 montre le contenu de la zone de données à l’exécution après C := 12. La valeur 12 est affectée à la variable C.
Figure 5: Zone de données (après C:=12)
5.4 Attribution des adresses
Le compilateur attribue des adresses relatives aux variables dans leur ordre de déclaration.
Dans l’exemple, les variables A, B et C auront comme adresses relatives dans la zone de données 0, 1 et 2 respectivement.