Compilador MS C # e código não otimizado
Nota: notei alguns erros no meu exemplo publicado - edição para corrigi-lo
O compilador C # oficial faz algumas coisas interessantes se você não ativar a otimização.
Por exemplo, uma declaração if simples:
int x;
// ... //
if (x == 10)
// do something
se torna algo como o seguinte se otimizado:
ldloc.0
ldc.i4.s 10
ceq
bne.un.s do_not_do_something
// do something
do_not_do_something:
mas se desativarmos a otimização, ela se tornará algo assim:
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:
Eu não consigo entender direito isso. Por que todo esse código extra, que aparentemente não está presente na fonte? Em C #, isso seria o equivalente a:
int x, y;
// ... //
y = x == 10;
if (y != 0)
// do something
Alguém sabe por que faz isso?