2009-04-05 8 views

Répondre

2

Ce sont des choses très différentes, et je vous suggère de revenir en arrière et de relire les définitions qui vous ont troublés. Une définition d'atteinte d'une variable pour un point qui utilise la variable donnée doit être, entre autres choses, une définition de cette variable. La durée de vie d'une variable est la partie du programme dans laquelle elle peut être utilisée, qui inclut des éléments autres que des définitions, par exemple, la lecture.

Voir, par exemple, le 1986 dragon Livre, pages 534 (peut-être trop générale pour être utile) et 610.

3

définitions sont définies Reaching par rapport à un endroit particulier dans un programme. Par exemple, à la ligne 10, avec le code «a = b + c», il est utile que le compilateur connaisse la définition de «c» ou, en d'autres termes, réponde à la question «dans quelle affirmation la variable c acquiert-elle valeur qui peut atteindre la ligne 10? ".

La plage dynamique est définie par rapport à une variable. La plage dynamique de la variable c commence à partir de la définition de la variable c et va jusqu'à la prochaine définition de la variable (où la variable est tuée, ou définie comme une variable différente, si vous utilisez SSA), ou la fin de la scope (bloc, fonction ou programme) que la variable c existe.

Les deux concepts sont similaires, mais ils ne sont pas la même chose.

+0

Pour ajouter à la réponse de @ Anthony. Live range dépend également de la partie du programme où la variable est utilisée. Si une variable est définie et utilisée plusieurs fois. Ensuite, pour une longue période du programme, il n'est pas utilisé jusqu'à ce qu'il soit tué. Je ne pense pas que la portée en direct devrait inclure la partie du programme où elle n'est pas utilisée. –

+0

En retournant le graphe de flux de commande, une variable est considérée comme active entre une utilisation de cette variable et sa dernière définition (affectation) avant cette utilisation. C'est la gamme (def, use) pas la gamme (def, def). Une variable qui n'est jamais utilisée n'est pas considérée comme vivante, même si elle peut être définie un million de fois. –

Questions connexes