next up previous contents
Next: Les fonctions en paramètre Up: Implémentation Previous: Lien statique et dynamique

Optimisation : les displays

Plutôt que de maintenir ces liens d'accès qui obligent à parcourir la pile, on peut maintenir un tableau (display) qui pointera directement sur l'``activation record''. Le display d sera un tableau de pointeurs tel que dynamiquement d[i] pointera sur l'``activation record'' de profondeur i. La profondeur d'un bloc est calculable à la compilation et le compilateur peut déterminer le bloc le plus profond et donc la taille du display. Pour trouver l'adresse d'une variable non-locale v, le compilateur a déterminé la profondeur i du bloc de la déclaration de v et l'adresse relative de v dans cette ``activation record''. il suffira d'accéder à cette ``activation record'' dont l'adresse est d[i] (l'accès se fait donc en 1 seul accès dans le display et un déplacement dans l'``activation record'').

Pour maintenir ces displays, une solution générale consiste à sauvegarder ces displays dans les ``activation record''. On peut améliorer encore un peu en ne sauvant d[i] que lors d'une ``activation record'' de profondeur i. Pour un appel d'un bloc de profondeur i:

  1. sauver l'ancien d[i] dans l'``activation record'' de l'appelé
  2. faire pointer d[i] sur l'``activation record'' de l'appelé
pour le retour, il suffira de restaurer le d[i] sauvegardé dans la procédure appelée.




Mon Oct 20 14:02:48 MET 1997