Next: Les pointeurs
Up: La mémoire
Previous: La représentation des variables
Les appels de procédure sont gérés en mémoire par un
mécanisme d'empilement.
L'exemple suivant illustre ce mécanisme. Soit le programme :
program P;
var
a, b : integer;
procedure plusc(x:integer; var y : integer);
var c : integer;
begin
c:=3;
x:=x+c;
y:=y+c;
writeln(x,y);
end;
begin
a:=1;
b:=1;
writeln(a,b);
plusc(a,b);
writeln(a,b);
end.
Figure 6.1: État de la mémoire avant l'appel de plusc
Figure 6.2: État de la mémoire lors de l'appel de plusc
Figure 6.3: État de la mémoire en fin d'exécution
de plusc
Figure 6.4: État de la mémoire après l'exécution de plusc
Les quatre figures précédentes expliquent le mécanisme de l'appel d'une
procédure. Les schémas représentent la pile (la mémoire de l'ordinateur)
à différents moments de l'exécution du programme.
- Au début de l'exécution du programme, la zone mémoire correspondant
à ce programme est repérée par le nom du programme. Les variables
globales du programme sont représentées dans la pile (figure 6.1).
- Lors de l'appel de la procédure on empile les paramètres. Les
paramètres formels de type valeurs reçoivent la valeur des paramètres
effectifs qui leurs sont associés lors de l'appel. Les paramètres formels
de type variable reçoivent la valeur des adresses des paramètres
effectifs qui leurs sont associés lors de l'appel.
Enfin les variables locales à la procédure sont empilées
(figure 6.2).
- Exécution de la procédure. Les variables globales utilisées commes
paramètres effectifs associés à des paramètres formels de type
variable sont modifiées lors de l'exécution de la procédure
(figure 6.3).
- A la fin de l'exécution de la procédure on dépile tous les
paramètres et toutes les variables locales associées à la procédure
(figure 6.4).
Frederic Mesnard
mardi, 15 décembre 1998, 16:13:24 GMT+4