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
:
d[i]
dans l'``activation record'' de l'appeléd[i]
sur l'``activation record'' de l'appelé
d[i]
sauvegardé dans la
procédure appelée.