i++ VS ++i
От: Vadimmer Франция https://github.com/vadimkantorov
Дата: 09.05.06 16:08
Оценка: :)
За и против. Пофлеймим ? Есть ли разница по скорости в for'е С# (я __на самом деле__ понимаю, что это все фигня). ИМХО все оптимизируется. Как известные блоггеры/разработчики пишут?

13.05.06 11:42: Перенесено из '.NET'
Учусь, учусь и ещё раз учусь
Re: i++ VS ++i
От: krasin Россия  
Дата: 09.05.06 16:27
Оценка: 1 (1)
Здравствуйте, Vadimmer, Вы писали:

V>За и против. Пофлеймим ? Есть ли разница по скорости в for'е С# (я __на самом деле__ понимаю, что это все фигня). ИМХО все оптимизируется. Как известные блоггеры/разработчики пишут?


Возьмите ildasm или reflector и убедитесь, что и код
for (int i = 0; i < 10; i++)
{
  Console.WriteLine("lala");
}

и код
for (int i = 0; i < 10; ++i)
{
  Console.WriteLine("lala");
}

компилируется в один и тот же IL:
.method private hidebysig static void Main() cil managed
{
      .entrypoint
      .maxstack 2
      .locals init (
            int32 num1)
      L_0000: ldc.i4.0 
      L_0001: stloc.0 
      L_0002: br.s L_0012
      L_0004: ldstr "lala"
      L_0009: call void [mscorlib]System.Console::WriteLine(string)
      L_000e: ldloc.0 
      L_000f: ldc.i4.1 
      L_0010: add 
      L_0011: stloc.0 
      L_0012: ldloc.0 
      L_0013: ldc.i4.s 10
      L_0015: blt.s L_0004
      L_0017: ret 
}


Вопрос закрыт?
Re: i++ VS ++i
От: Oyster Украина https://github.com/devoyster
Дата: 09.05.06 16:35
Оценка:
Здравствуйте, Vadimmer, Вы писали:

V>За и против. Пофлеймим ? Есть ли разница по скорости в for'е С# (я __на самом деле__ понимаю, что это все фигня). ИМХО все оптимизируется. Как известные блоггеры/разработчики пишут?


Не думаю, что есть особая разница. Возможно, префиксный вариант будет быстрее, как и в C++ и по тем же причинам (не нужно кешировать и возвращать предыдущее значение). Если честно, то даже лень перегружать оператор, компилить и лезть смотреть рефлектором, что в итоге получается
Re[2]: i++ VS ++i
От: Vadimmer Франция https://github.com/vadimkantorov
Дата: 09.05.06 16:48
Оценка:
K>Вопрос закрыт?

Ага. А про С++ что известно? (наверное, не в тот форум)
Учусь, учусь и ещё раз учусь
Re[3]: i++ VS ++i
От: Oyster Украина https://github.com/devoyster
Дата: 09.05.06 17:26
Оценка:
Здравствуйте, Vadimmer, Вы писали:

V>Ага. А про С++ что известно? (наверное, не в тот форум)


В случае с инкрементом итератора, например, ++i быстрее — причину я уже указывал
Автор: Oyster
Дата: 09.05.06
.
Re[4]: i++ VS ++i
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.05.06 18:54
Оценка: +1
Здравствуйте, Oyster, Вы писали:

O>В случае с инкрементом итератора, например, ++i быстрее — причину я уже указывал
Автор: Oyster
Дата: 09.05.06
.


А зачем его тут кэшировать?

Глупость это. Если компилятор не кривой и оптимзирирующий, то разницы быть не должно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: i++ VS ++i
От: Oyster Украина https://github.com/devoyster
Дата: 09.05.06 19:17
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А зачем его тут кэшировать?


VD>Глупость это. Если компилятор не кривой и оптимзирирующий, то разницы быть не должно.


В цикле да. Вообще нет — вспомни те же итераторы С++.
Re[5]: i++ VS ++i
От: Воронков Василий Россия  
Дата: 09.05.06 19:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Глупость это. Если компилятор не кривой и оптимзирирующий, то разницы быть не должно.


А если речь идет не о примитивах и операторы перегружены? Уверен, что не будет разницы?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: i++ VS ++i
От: dimaka Россия http://dmitry-pavlov.com
Дата: 09.05.06 21:22
Оценка: +1 :))) :)
Здравствуйте, Vadimmer, Вы писали:

V>За и против. Пофлеймим ?

Я за i++ — больше нравится и все тут
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Remote ASP.NET / C# Developer
Re[2]: i++ VS ++i
От: Ведмедь Россия  
Дата: 10.05.06 13:11
Оценка: :)
Здравствуйте, krasin, Вы писали:

K>Здравствуйте, Vadimmer, Вы писали:


V>>За и против. Пофлеймим ? Есть ли разница по скорости в for'е С# (я __на самом деле__ понимаю, что это все фигня). ИМХО все оптимизируется. Как известные блоггеры/разработчики пишут?


K>Возьмите ildasm или reflector и убедитесь, что и код

K>
K>for (int i = 0; i < 10; i++)
K>{
K>  Console.WriteLine("lala");
K>}
K>

K>и код
K>
K>for (int i = 0; i < 10; ++i)
K>{
K>  Console.WriteLine("lala");
K>}
K>


Не корретные примеры. Вот такой код будет ли совпадать?


for (int i = 0; i < 10;)
{
  Console.WriteLine("{0}", i++);
}

for (int i = 0; i < 10;)
{
  Console.WriteLine("lala", ++i);
}
Да пребудет с тобой Великий Джа
Re[3]: i++ VS ++i
От: kpumuk Украина http://kpumuk.info/
Дата: 10.05.06 14:06
Оценка:
Здравствуйте, Ведмедь, Вы писали:

В>Не корретные примеры. Вот такой код будет ли совпадать?


В>
В>for (int i = 0; i < 10;)
В>{
В>  Console.WriteLine("{0}", i++);
В>}

В>for (int i = 0; i < 10;)
В>{
В>  Console.WriteLine("lala", ++i);
В>}
В>


Нет, конечно! У тебя же разные параметры функции. А насчет вычисления инкрементов — да, одинаковый:

L_00ea: ldloc.s num3
L_00ec: ldc.i4.1 
L_00ed: add 
L_00ee: dup 
L_00ef: stloc.s num3


L_00c0: ldloc.s num3
L_00c2: dup 
L_00c3: ldc.i4.1 
L_00c4: add 
L_00c5: stloc.s num3
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: i++ VS ++i
От: qxWork Голландия http://www.jetbrains.com/company/people/Coox_Sergey.html
Дата: 10.05.06 15:48
Оценка: +1 -1
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, VladD2, Вы писали:


VD>>Глупость это. Если компилятор не кривой и оптимзирирующий, то разницы быть не должно.

ВВ>А если речь идет не о примитивах и операторы перегружены? Уверен, что не будет разницы?
Разумеется, разница будет. И вообще, хороший стиль писать ++i, если предыдущее значение нафиг не сдалось. А то сегодня у i тип int, а завтра ты его заменишь MyIterator.
Re[6]: i++ VS ++i
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.05.06 15:43
Оценка:
Здравствуйте, Oyster, Вы писали:

O>В цикле да. Вообще нет — вспомни те же итераторы С++.


Ты понимашь насколько реализация даже самого примитивного итератора сложнее и затратее по времени, чем нюансы его вызова?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: i++ VS ++i
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.05.06 15:43
Оценка: +3
Здравствуйте, Воронков Василий, Вы писали:

ВВ>А если речь идет не о примитивах и операторы перегружены? Уверен, что не будет разницы?


Не уверен. Причем не уверен, что если разница будет, то в ту сторону в которую предсказывают смелые товарищи.

В общем, это ловля блох. Люди которые на полном серьезе обсуждают вопросы производительности оператора ++ просто зря едят свой хлеб.

Единственно что нужно учитывать применяя этот оператор — это его семантику. Если результат нужен до инкремента, то применяем i++ иначе ++i. И все. Остально булшит.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: i++ VS ++i
От: Oyster Украина https://github.com/devoyster
Дата: 11.05.06 15:57
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ты понимашь насколько реализация даже самого примитивного итератора сложнее и затратее по времени, чем нюансы его вызова?


Ну это как раз случай той самой метрии
Re[7]: i++ VS ++i
От: Константин Л. Франция  
Дата: 11.05.06 16:51
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Воронков Василий, Вы писали:


ВВ>>А если речь идет не о примитивах и операторы перегружены? Уверен, что не будет разницы?


VD>Не уверен. Причем не уверен, что если разница будет, то в ту сторону в которую предсказывают смелые товарищи.


VD>В общем, это ловля блох. Люди которые на полном серьезе обсуждают вопросы производительности оператора ++ просто зря едят свой хлеб.


Для с++'ных user defined типов,если у них "тяжелый" конструктор копирования, использование ++ как говорится, make sense. Т.е. постфиксный оператор ++ может замедлить программу. Другое дело, что для "тяжелых" типов вряд-ли найдется применение ++

VD>Единственно что нужно учитывать применяя этот оператор — это его семантику. Если результат нужен до инкремента, то применяем i++ иначе ++i. И все. Остально булшит.
Re[8]: i++ VS ++i
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.05.06 18:27
Оценка: -1
Здравствуйте, Константин Л., Вы писали:

КЛ>Для с++'ных user defined типов,если у них "тяжелый" конструктор копирования, использование ++ как говорится, make sense. Т.е. постфиксный оператор ++ может замедлить программу. Другое дело, что для "тяжелых" типов вряд-ли найдется применение ++


Давно не видел таких фобий. Ребятки, вы думайте о том, как вам применить лучшие алгоритмы, или воспользоваться более быстрыми библиотеками, а не рассуждайте с умным видом о скорости операторов которые переводятся в 1-4 машинные команды и имеют константное время измеряемое в наносекундах.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: i++ VS ++i
От: Константин Л. Франция  
Дата: 11.05.06 19:12
Оценка: +1 :))
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Константин Л., Вы писали:


КЛ>>Для с++'ных user defined типов,если у них "тяжелый" конструктор копирования, использование ++ как говорится, make sense. Т.е. постфиксный оператор ++ может замедлить программу. Другое дело, что для "тяжелых" типов вряд-ли найдется применение ++


VD>Давно не видел таких фобий. Ребятки, вы думайте о том, как вам применить лучшие алгоритмы, или воспользоваться более быстрыми библиотеками, а не рассуждайте с умным видом о скорости операторов которые переводятся в 1-4 машинные команды и имеют константное время измеряемое в наносекундах.


Вижу, что человек в предмете не разбирается...
Re[10]: i++ VS ++i
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.05.06 19:27
Оценка: :)
Здравствуйте, Константин Л., Вы писали:

КЛ>Вижу, что человек в предмете не разбирается...


Это не сюда. Это к акулисту.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: i++ VS ++i
От: Константин Л. Франция  
Дата: 11.05.06 19:43
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Константин Л., Вы писали:


КЛ>>Вижу, что человек в предмете не разбирается...


VD>Это не сюда. Это к акулисту.


Во всех твоих постах попахивает хамством, фамильярностью и претензией на абсолютную истинность.
Ты Г.Саттера читал? Там про разницу м/у постфиксной и префиксной формой написано. И почему в общем случае компилятор первую не может заменить на вторую.
Подчеркиваю, что все это относится только к с++. Про с# ничего скзать не могу, хотя, наверное, ситуация мало чем отличается.
Просто надо иметь привычку писать ++i вместо i++ если не нужно предыдущее значение. В этом я с тобой согласен.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.