Вопрос — что быстрее.
Понятно, что если i — объект класса, ну например какой-сь std::iterator, то ++i быстрее, но недавно где то увидел фразу, что лучше использовать префиксный, потому что он быстрее, и это было в контексте такой операции:
for (int i = 0; i < MAX; i++) {}
Возник вопрос, а как работают стандартные типы? Как быстрее?
Спасибо
" Аноним " <0@users.rsdn.ru> wrote in message news:1861563@news.rsdn.ru... > Вопрос — что быстрее. > Понятно, что если i — объект класса, ну например какой-сь std::iterator, то ++i быстрее, но недавно где то увидел фразу, что лучше использовать префиксный, потому что он быстрее, и это было в контексте такой операции: > >
> for (int i = 0; i < MAX; i++) {}
>
> > Возник вопрос, а как работают стандартные типы? Как быстрее? > Спасибо
Именно в таком примере, как приводишь ты, компилятор с оптимизатором сгенерирует одинаковый код при использовании как префиксного так и постфиксного инкремента. Но в общем случае, префиксный инкремент быстрее, т.к. он кроме модификации объекта ничего больше не делает. А постфиксный инкремент сначала создает временную копию объекта, потом выполняет ту работу, которую выполняет префиксный инкремент, а потом возвращает ранее сделанную копию.
Posted via RSDN NNTP Server 2.0
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, Аноним, Вы писали:
А>Вопрос — что быстрее. А>Понятно, что если i — объект класса, ну например какой-сь std::iterator, то ++i быстрее, но недавно где то увидел фразу, что лучше использовать префиксный, потому что он быстрее, и это было в контексте такой операции:
А>
А>for (int i = 0; i < MAX; i++) {}
А>
А>Возник вопрос, а как работают стандартные типы? Как быстрее?
Для встроенных типов оптимизатор вполне может заменить постфиксный инкримент на префиксный, так что на практике, скорее всего, никакой разницы не будет. Однако имеет смысл выработать привычку, и использовать постфиксную форму только тогда, когда это действительно нужно.
Здравствуйте, Аноним, Вы писали:
А>Вопрос — что быстрее. А>Понятно, что если i — объект класса, ну например какой-сь std::iterator, то ++i быстрее, но недавно где то увидел фразу, что лучше использовать префиксный, потому что он быстрее, и это было в контексте такой операции: А>Возник вопрос, а как работают стандартные типы? Как быстрее?
"i++;" и "++i;" — одинаково. Разница возникает в более сложных конструкциях. Например "if( ++i )" бысрее "if( i++ )".
Re[2]: i++ and ++i
От:
Аноним
Дата:
21.04.06 14:29
Оценка:
Здравствуйте, rg45, Вы писали:
R>Именно в таком примере, как приводишь ты, компилятор с оптимизатором сгенерирует одинаковый код при использовании как префиксного так и постфиксного инкремента. Но в общем случае, префиксный инкремент быстрее, т.к. он кроме модификации объекта ничего больше не делает. А постфиксный инкремент сначала создает временную копию объекта, потом выполняет ту работу, которую выполняет префиксный инкремент, а потом возвращает ранее сделанную копию.
Копию в памяти... ясно, сенкс.
Эт получается (просьба не закидывать камнями за параноидальную мысль), что на такую операцию может и памяти не хватить?
Но это уже так, риторический вопрос
" Аноним " <0@users.rsdn.ru> wrote in message news:1861607@news.rsdn.ru... > > Копию в памяти... ясно, сенкс. > Эт получается (просьба не закидывать камнями за параноидальную мысль), что на такую операцию может и памяти не хватить? > Но это уже так, риторический вопрос
Теоретически — запросто, тем более, что временные объекты создаются в стеке.
Posted via RSDN NNTP Server 2.0
--
Не можешь достичь желаемого — пожелай достигнутого.
На практике, если компилятор был выпущен после окончания палеолита, то в случае, когда замена одного другим не меняет производимого кодом эффекта, такая замена производится.
Это зависит от того, что делается внутри цикла. Если там последовательный доступ к памяти, то цикл вниз рискует не воспользоваться преимуществами процессорного кэша.