next up previous
Next: Les pointeurs Up: La mémoire Previous: La représentation des variables

La pile et les appels de procédures

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.

  figure340
Figure 6.1:  État de la mémoire avant l'appel de plusc

  figure345
Figure 6.2:  État de la mémoire lors de l'appel de plusc

  figure350
Figure 6.3:  État de la mémoire en fin d'exécution de plusc

  figure355
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.

  1. 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).
  2. 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).
  3. 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).
  4. 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