MS C # -Compiler und nicht optimierter Code

Hinweis: In meinem Beispiel sind einige Fehler aufgetreten. Bearbeiten, um das Problem zu beheben.

Der offizielle C # -Compiler führt einige interessante Aktionen aus, wenn Sie die Optimierung nicht aktivieren.

Zum Beispiel eine einfache if-Anweisung:

int x;
// ... //
if (x == 10)
   // do something

wird so etwas wie das Folgende, wenn es optimiert wird:

ldloc.0
ldc.i4.s 10
ceq
bne.un.s do_not_do_something
// do something
do_not_do_something:

Aber wenn wir die Optimierung deaktivieren, wird es ungefähr so:

ldloc.0
ldc.i4.s 10
ceq
ldc.i4.0
ceq
stloc.1
ldloc.1
brtrue.s do_not_do_something
// do something
do_not_do_something:

Ich kann das nicht wirklich verstehen. Warum all dieser zusätzliche Code, der anscheinend nicht in der Quelle vorhanden ist? In C # wäre dies das Äquivalent von:

int x, y;
// ... //
y = x == 10;
if (y != 0)
   // do something

Weiß jemand warum das so ist?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage