Wednesday, February 20, 2019

Gebrauch-Definieren-Kette - Wikipedia


A Use-Definition-Kette ( UD-Kette ) ist eine Datenstruktur, die aus einer Verwendung U einer Variablen und allen Definitionen D dieser Variablen besteht das kann diese Verwendung ohne weitere eingreifende Definitionen erreichen. Eine Definition kann viele Formen haben, aber im Allgemeinen wird die Zuweisung eines bestimmten Werts zu einer Variablen verstanden (was sich von der Verwendung des Begriffs unterscheidet, der sich auf das Sprachkonstrukt bezieht, das einen Datentyp umfasst und Speicher zuordnet).

Ein Gegenstück zu einer UD-Kette ist eine Definition-Use-Kette ( DU-Kette ), die aus einer Definition, D, einer Variablen und besteht alle Verwendungen, U, die aus dieser Definition ohne weitere dazwischenliegende Definitionen erreichbar sind.

Sowohl UD- als auch DU-Ketten werden unter Verwendung einer Form statischer Code-Analyse erstellt, die als Datenflussanalyse bezeichnet wird. Die Kenntnis der Use-Def- und Def-Use-Ketten für ein Programm oder Unterprogramm ist eine Voraussetzung für viele Compiler-Optimierungen, einschließlich der ständigen Propagierung und der Eliminierung allgemeiner Teilausdrücke.




Zweck [ edit ]


Das Erstellen der Use-Define- oder Define-Use-Ketten ist ein Schritt in der Aktivitätsanalyse, sodass logische Repräsentationen aller Variablen identifiziert und durchlaufen werden können der Code.

Betrachten Sie den folgenden Code-Ausschnitt:


  int   x   =   0 ;      / * A * / 
x = x x 19659019] ] / * B * /
/ * 1, einige Verwendungen von x * /
x = 35 ; / C * /
/ * 2, einige weitere Verwendungen von x * /

Beachten Sie, dass x an drei Punkten (mit A, B und C gekennzeichnet) ein Wert zugewiesen wird. An der mit "1" markierten Stelle sollte die use-def-Kette für x jedoch anzeigen, dass ihr aktueller Wert von Zeile B stammen muss (und ihr Wert in Zeile B muss von Zeile A stammen). Im Gegensatz dazu zeigt die Use-Def-Kette für x an der mit "2" markierten Stelle an, dass ihr aktueller Wert von der Linie C stammen muss. Seit dem Wert von x in Block 2 hängt nicht von Definitionen in Block 1 oder früher ab, x könnte dort auch eine andere Variable sein; praktisch ist eine andere Variable - nennen Sie es x2 .


  int   x   =   0 ;      / * A * / 
x = x x 19659019] ]; / * B * /
/ * 1, einige Verwendungen von x * /
int x2 = 35 / * C * /
/ * 2, einige Verwendungen von x2 * /

Das Aufteilen von x in zwei separate Variablen wird als Live-Range-Aufteilung bezeichnet. Siehe auch statisches Formular für Einzelzuweisungen.



Die Liste der Anweisungen bestimmt eine starke Reihenfolge unter den Anweisungen.


Für eine Variable wie v wird ihre Deklaration als V bezeichnet ] (kursiver Großbuchstabe), und kurz gesagt, wird seine Deklaration als . Im Allgemeinen kann sich eine Deklaration einer Variablen in einem äußeren Bereich befinden (z. B. eine globale Variable ).


Definition einer Variablen [ edit ]


Wenn eine Variable v auf der LHS einer Zuordnungserklärung steht, wie dann ist eine Definition von v . Jede Variable ( v ) hat mindestens eine Definition in ihrer Deklaration ( V ) (oder Initialisierung).


Verwendung einer Variablen [ edit ]


Wenn Variable, v steht auf der RHS-Anweisung