Компилятор MS C# и неоптимизированный кодC#

Место общения программистов C#
Ответить
Anonymous
 Компилятор MS C# и неоптимизированный код

Сообщение Anonymous »

Примечание. Я заметил некоторые ошибки в опубликованном примере. Отредактируйте их, чтобы исправить.

Официальный компилятор C# делает некоторые интересные вещи, если вы не включать оптимизацию.

Например, простой оператор if:

Код: Выделить всё

int x;
// ... //
if (x == 10)
// do something
при оптимизации становится примерно следующим:

Код: Выделить всё

ldloc.0
ldc.i4.s 10
ceq
bne.un.s do_not_do_something
// do something
do_not_do_something:
но если отключить оптимизацию, получится примерно так:

Код: Выделить всё

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:
Я не могу уяснить это. Зачем весь этот дополнительный код, которого, казалось бы, нет в исходнике? В C# это будет эквивалентно:

Код: Выделить всё

int x, y;
// ... //
y = x == 10;
if (y != 0)
// do something
Кто-нибудь знает, почему он это делает?

Подробнее здесь: https://stackoverflow.com/questions/365 ... mized-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»