2016-11-07 2 views
2

Lors de la création d'un tableau, comment un langage comme fortran effectue-t-il des enregistrements d'activation lorsqu'il se trouve dans un environnement entièrement statique (car il ne connaît pas la taille de le tableau pendant la compilation)? Je sais qu'il utilise le passage par référence, cela signifie-t-il que dans l'enregistrement d'activation, il stocke une référence au lieu d'un tableau, ce qui lui permet de stocker une référence à un tableau qui n'a pas encore été créé?Activation des enregistrements et des tableaux dans Fortran (ou les langues qui ont tous les environnements statiques)

+0

Qu'entendez-vous par tout environnement statique? Vous devez comprendre que le même tableau peut être regardé de manières très différentes et peut utiliser un descripteur de tableau dans une portée et un pointeur simple dans une portée différente. –

+0

Aussi, Fortran ne passe pas par une simple référence. Et quand c'est le cas, le descripteur n'est souvent pas nécessaire, juste un pointeur. –

+0

Alors, comment utilise-t-il les enregistrements d'activation? Comment fait-il un espace dans l'enregistrement d'activation pour un tableau de taille non spécifié? –

Répondre

1

Vous pourriez être dérouté car il est généralement dit que, dans de nombreuses implémentations de FORTRAN, il existe un seul enregistrement d'activation pour chaque sous-programme qui peut être alloué statiquement en tant qu'extension du segment de code. (voir par exemple: 4ème édition de "Programming Languages, Design and implementation" par TW Pratt & MV Zelkowitz.)

Il faut garder à l'esprit que même dans ce cas, l'enregistrement d'activation est toujours rempli pendant l'exécution, seulement l'espace est alloué statiquement. C'est simple à comprendre car il peut y avoir beaucoup d'appels au même sous-programme. Et tous ces appels partagent le même enregistrement d'activation, un seul appel étant en vie à chaque fois. Plus important encore, les données du tableau ne sont pas incluses dans l'enregistrement d'activation. Passer argument par référence signifie qu'il n'y a pas de duplication de données. Seule une référence (pointeur, ou tout ce que l'implémentation choisit) est incluse dans l'enregistrement d'activation. Dans le sous-programme, l'accès aux éléments du tableau peut alors être calculé par le mécanisme d'adresse de base + offset.

+0

Les tableaux sont donc possibles car une référence n'est stockée que dans l'enregistrement d'activation, est-ce correct? –

+0

Dans une certaine mesure, oui; en particulier pour les langages de programmation qui construisent un seul enregistrement d'activation statique pour chaque sous-programme. – innoSPG