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?
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:
Build-in-Release mit aktivierten Optimierungen, die solche Variablen entfernen sollten.