Zusammenfassung Alias-Analyse begonnen
This commit is contained in:
parent
1d4d54f1f2
commit
e7dfdc35af
BIN
verfahren.pdf
BIN
verfahren.pdf
Binary file not shown.
@ -354,7 +354,103 @@
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\section{Aliasanalyse}
|
\section{Alias-Analyse}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Aliase: Verschiedene Möglichkeiten auf gleiche Speicherstelle zuzugreifen
|
||||||
|
\item Sprachabhängige Quellen von Aliasen: \begin{itemize}
|
||||||
|
\item dynamisch allokierte Datenstrukturen
|
||||||
|
\item Zeiger
|
||||||
|
\item überlappende Speicherbereiche
|
||||||
|
\item Referenzen auf Arrays, -Abschnitte, -Dimensionen und -Elemente
|
||||||
|
\item Prozedurparameter
|
||||||
|
\item Zeigerarithmetik
|
||||||
|
\end{itemize}
|
||||||
|
\item Sprachunabhängige Quellen wie Transitivität ($a$ zeigt auf $b$ und $b$ zeigt auf $c$ $\rightarrow$ $c$ ist von $a$ erreichbar)
|
||||||
|
\item TODO: Aliase in Fortran, Pascal, C und Java (VL-07)
|
||||||
|
\item mögliche Aliase (may) müssen nur in einem Pfad Aliase sein
|
||||||
|
\item sichere Aliase (must) müssen in allen Pfaden Aliase sein
|
||||||
|
\item Fluss-ignorierende Analyse bestimmt, ob Namen irgendwo im KFG Aliase sein können: \begin{itemize}
|
||||||
|
\item vergleichsweise einfach berechenbar
|
||||||
|
\item oft für interprozedurale Analyse eingesetzt
|
||||||
|
\item Relation $\mathrm{Alias}(a, b)$ gibt an, dass $a$ und $b$ für ganze Prozedur Aliase sind, ist reflexiv, symmetrisch und bei must-Analyse auch transitiv
|
||||||
|
\end{itemize}
|
||||||
|
\item Fluss-sensitive Analyse bestimmt, ob Namen in einem Basisblock Aliase sein können: \begin{itemize}
|
||||||
|
\item aufwändige Berechnung
|
||||||
|
\item oft für intraprozedurale Analyse eingesetzt
|
||||||
|
\item Funktion $\mathrm{Alias}(P, v) = S$ gibt an, dass $v$ an Programmpunkt $P$ auf Speicherstelle $S$ zeigen kann
|
||||||
|
\item Bei may-Analyse: \begin{itemize}
|
||||||
|
\item $\mathrm{Alias}(P, v_1) \cap \mathrm{Alias}(P, v_2) \neq \emptyset \Leftrightarrow$ $v_1, v_2$ sind in $P$ Aliase
|
||||||
|
\item nicht transitiv
|
||||||
|
\end{itemize}
|
||||||
|
\item Bei must-Analyse: \begin{itemize}
|
||||||
|
\item $\vert \mathrm{Alias}(P, v)\vert = 1$, Aliase wenn Speicherstelle gleich
|
||||||
|
\item transitiv
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
\item intraprozedurale Analyse: \begin{itemize}
|
||||||
|
\item Betrachtung einer einzelnen Prozedur
|
||||||
|
\item Worst-Case-Annahmen bei Aufruf anderer Prozedur
|
||||||
|
\item häufig auf Datenflussproblem zurückgeführt
|
||||||
|
\end{itemize}
|
||||||
|
\item interprozedurale Analyse: \begin{itemize}
|
||||||
|
\item Standard-Verfahren
|
||||||
|
\item Andersens Algorithmus
|
||||||
|
\item Steensgards Algorithmus
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsection{DFA-Ansatz zur intraprozeduralen, fluss-sensitiven may-Analyse nach Muchnick}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Vorwärtsproblem mit minimalen Grundblöcken
|
||||||
|
\item Sprachabhängige lokale Flussfunktionen für unmittelbare Auswirkungen pro Instruktion (Sammler/Gatherer): \begin{itemize}
|
||||||
|
\item TODO (VL-07)
|
||||||
|
\end{itemize}
|
||||||
|
\item Sprachunabhängiger Fixpunktpunktalgorithmus (Verbreiter/Propagator): \begin{itemize}
|
||||||
|
\item TODO (VL-07)
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsection{Standard-Verfahren zur interprozeduralen, fluss-insensitiven may-Analyse mit $\mathcal{O}(n^2 + n \cdot e)$}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Alias-Quellen in Sprachen ohne \&-Operator: \begin{itemize}
|
||||||
|
\item Übergabe globaler Variable an Funktion
|
||||||
|
\item Übergabe der gleichen Variable an mehrere formale Parameter einer Funktion
|
||||||
|
\item Zugriff auf umgebende Variablen/formale Parameter bei geschachtelten Prozeduren (vgl. globale Variablen)
|
||||||
|
\end{itemize}
|
||||||
|
\item Prozeduraufrufgraph (PCG): \begin{itemize}
|
||||||
|
\item Knoten: Prozeduren des Programms
|
||||||
|
\item Gerichtete Kante von $p$ nach $q$ wenn $p$ $q$ aufrufen kann
|
||||||
|
\end{itemize}
|
||||||
|
\item Variablenbindungsgraph: \begin{itemize}
|
||||||
|
\item Knoten: formale Parameter
|
||||||
|
\item Gerichtete Kante von $x$ nach $y$ wenn $(p, q)$ in PCG, $x$ formaler Parameter von $p$ und $x$ Argument für formalen Parameter $y$ von $q$
|
||||||
|
\item transitiver Abschluss liefert Alias-Menge der formalen Parameter (aber globale Variablen sind nicht berücksichtigt)
|
||||||
|
\end{itemize}
|
||||||
|
\item Paarbindungsgraph: \begin{itemize}
|
||||||
|
\item Knoten: alle Paare formaler Parameter
|
||||||
|
\item Gerichtete Kante von $(x, y)$ nach $(X, Y)$, wenn \begin{itemize}
|
||||||
|
\item $(x,y)$ bei einem Anruf an $(X,Y)$ gebunden werden oder
|
||||||
|
\item $(x,y)$ bei einem Aufruf im Inneren einer geschachtelten Prozedur an $(X, Y)$ gebunden werden, wobei ggf. Aliase von $x$ oder $y$ verwendet werden
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}\begin{enumerate}
|
||||||
|
\item Aliase globaler Variablen: \begin{enumerate}
|
||||||
|
\item Bindungen von globalen Variablen an formalen Parametern entdecken
|
||||||
|
\item Aus Pfaden in Variablenbindungsgraph zusätzliche formale Parameter, an die globale Variable weitergegeben werden können, bestimmen (in topologischer Reihenfolge durchlaufen; bei Zyklen bis Fixpunkt erreicht)
|
||||||
|
\item Aliase der globalen Variablen ablesen
|
||||||
|
\end{enumerate}
|
||||||
|
\item Parameterpaare als Aliase: Zwei formale Parameter sind Aliase, wenn \begin{itemize}
|
||||||
|
\item die gleiche Variable an beide übergeben wird
|
||||||
|
\item eine globale Variable und einer ihrer Aliase übergeben wird
|
||||||
|
\end{itemize}\begin{enumerate}
|
||||||
|
\item Betrachtung aller Paare formaler Parameter
|
||||||
|
\item Markierung der Paare, die beim Aufruf zu Alias-Paaren werden können
|
||||||
|
\item Propagation von Alias-Informationen durch den PCG
|
||||||
|
\item Ablesen der Aliase formaler Parameter
|
||||||
|
\end{enumerate}
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
\subsection{Steensgards Algorithmus}
|
||||||
|
|
||||||
\section{Induktionsvarianten und schleifeninvarianter Code}
|
\section{Induktionsvarianten und schleifeninvarianter Code}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user