In der Compiler-Datenflussanalyse, was ist der Unterschied zwischen einem Live-Bereich einer Variablen und es erreicht die Definition? Beide scheinen sich auf das Gleiche zu beziehen ...Live Range vs Reaching Definitionen
Antwort
Sie sind sehr unterschiedliche Dinge und ich schlage vor, dass Sie zurückgehen und die Definitionen lesen, die Sie verwirrt haben. Eine reichende Definition einer Variablen für einen Punkt, der die gegebene Variable verwendet, muss unter anderem eine Definition dieser Variablen sein. Die Lebensdauer einer Variablen ist der Teil des Programms, in dem sie verwendet werden kann, der andere Dinge als Definitionen enthält, z. B. Lesen.
Siehe zum Beispiel des 1986 Drachen Buch, Seiten 534 (vielleicht zu allgemein nützlich zu sein) und 610.
Erreichen Definitionen werden in Bezug auf eine bestimmte Stelle in einem Programm definiert. Zum Beispiel ist es in Zeile 10 mit dem Code "a = b + c" nützlich für den Compiler zu wissen, was die erreichende Definition von "c" ist, oder mit anderen Worten die Frage zu beantworten "in welcher Aussage hat Variable c a erhalten Wert, der Linie 10 erreichen kann? ".
Live-Bereich ist in Bezug auf eine Variable definiert. Der Lebendbereich von Variable c beginnt bei einer Definition von Variable c und geht bis zur nächsten Definition der Variablen (an der Stelle, an der die Variable gelöscht wird oder als eine andere Variable definiert wird, wenn Sie SSA verwenden) oder am Ende der Variablen Gültigkeitsbereich (Block, Funktion oder Programm) dieser Variablen c existiert.
Die beiden Konzepte sind ähnlich, aber sie sind nicht das Gleiche.
- 1. Live vs Entwicklung Verbindungszeichenfolgen
- 2. jquery: on vs live
- 3. jQuery: live() vs Delegat()
- 4. Jquery live() vs Delegat()
- 5. Wie Typoskript Definitionen in VS 2015
- 6. jQuery Mobile Delegat vs Live-vs binden
- 7. C3js Area Range-Diagramm
- 8. Bereinigung ORM-Definitionen übertragen?
- 9. Anhängen einer Datei MailGun vs Live-
- 10. Unterschied zwischen Content-Range und Range-Headern?
- 11. Convert/Quantize Float Range zu Integer Range
- 12. VBA automatisch ändern .Range zu .range
- 13. Looping Unterschiede in Ruby mit Range vs. Zeiten
- 14. Pythonic: range vs enumerate in Python for-Schleife
- 15. DocType Definitionen?
- 16. Codeigniter Pfadfunktionen Definitionen
- 17. mehrere Definitionen von `glwMDrawingAreaWidgetClass '
- 18. Externe Definitionen importieren
- 19. TypeScript-Definitionen für process.env.NODE_ENV?
- 20. Zepto Velocity.js Typoskript-Definitionen
- 21. Truststore- und Keystore-Definitionen
- 22. Rekursive Definitionen in Pandas
- 23. Flexible Compiler-Pipeline-Definitionen
- 24. Platform C Preprocessor Definitionen
- 25. Chef-Bibliotheken oder Definitionen?
- 26. Was ist der Unterschied zwischen `Range # include?` Und `Range # cover?`?
- 27. std :: uniform_real_distribution included range
- 28. Maths Range To Percentage
- 29. Haskell Range Map-Bibliothek
- 30. Range Slider in Django
Um @ Anthony's Antwort hinzuzufügen. Live-Bereich ist auch abhängig von dem Teil des Programms, in dem die Variable verwendet wird. Wenn eine Variable definiert und dann mehrmals verwendet wird. Dann für eine lange Strecke des Programms wird es nicht verwendet, bis es getötet wird Ich glaube nicht, Live-Bereich sollte den Teil des Programms enthalten, wo es nicht verwendet wird. –
Wenn Sie den Crontrol-Flow-Graph rückwärts laufen lassen, wird eine Variable als aktiv zwischen einer Verwendung dieser Variablen und ihrer letzten Definition (Zuweisung) vor dieser Verwendung betrachtet. Es ist der Bereich (def, use) nicht der Bereich (def, def). Eine Variable, die niemals verwendet wird, wird überhaupt nicht als lebendig betrachtet, obwohl sie millionenfach definiert ist. –