While Schleife in IL - warum stloc.0 und ldloc.0?

8

Ich versuche zu verstehen, wie eine While-Schleife in IL aussieht. Ich habe diese C # -Funktion geschrieben:

%Vor%

Die IL sieht so aus:

%Vor%

In den meisten Fällen ist das wirklich einfach, außer für den Teil nach cgt.

Was ich nicht verstehe, ist das lokale [0] und das stloc.0 / ldloc.0. Soweit ich es sehe, schiebt cgt das Ergebnis auf den Stack, stloc.0 holt das Ergebnis vom Stack in die lokale Variable, ldloc.0 schiebt das Ergebnis wieder auf den Stack und bratrue.s liest vom Stack.

Was ist der Zweck, dies zu tun? Könnte das nicht auf nur cgt gefolgt von brtrue.s verkürzt werden?

    
Michael Stum 09.04.2010, 04:18
quelle

2 Antworten

6

Versuchen Sie, mit Optimierungen zu kompilieren.

    
Ben Voigt 09.04.2010, 04:19
quelle
4

Das ist ein Debug-Build (aus dem nop ). Alle Wetten sind deaktiviert, aber es sieht so aus, als würde einfach eine Bool-Variable eingeführt:

%Vor%

Build-in-Release mit aktivierten Optimierungen, die solche Variablen entfernen sollten.

    
Marc Gravell 09.04.2010 04:21
quelle

Tags und Links