Compilador MS C # y código no optimizado
Nota: Noté algunos errores en mi ejemplo publicado: edición para corregirlo
El compilador oficial de C # hace algunas cosas interesantes si no habilita la optimización.
Por ejemplo, una simple declaración if:
int x;
// ... //
if (x == 10)
// do something
se convierte en algo parecido a lo siguiente si está optimizado:
ldloc.0
ldc.i4.s 10
ceq
bne.un.s do_not_do_something
// do something
do_not_do_something:
pero si deshabilitamos la optimización, se convierte en algo así:
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:
No puedo entenderlo. ¿Por qué todo ese código extra, que aparentemente no está presente en la fuente? En C #, esto sería el equivalente de:
int x, y;
// ... //
y = x == 10;
if (y != 0)
// do something
¿Alguien sabe por qué hace esto?