Вопрос:

i ++, i = i + 1 и i + = 1, какой из них быстрее?

c operators

4310 просмотра

3 ответа

208 Репутация автора

Мне очень интересно узнать , какой один запускаются быстрым в CPU среди i++, i+=1и i=i+1и как можно измерить их время выполнения?

Автор: user3928757 Источник Размещён: 21.03.2015 05:17

Ответы (3)


1 плюс

9475 Репутация автора

Возьмите отметку времени и выполните одну из них в цикле и отметку времени при выходе из цикла. Выполните цикл 1 миллион раз и сравните результаты для каждого цикла (например, один временной цикл для каждого другого типа). Если вы используете встроенную систему или что-то очень медленное, уменьшите количество итераций. Вам просто нужно достаточно петель, чтобы добиться заметной разницы.

Компиляторы разные, и они оптимизируют. Хороший компилятор, вероятно, генерирует один и тот же код для каждого, так что вы можете не увидеть никакой разницы.

Используйте функцию генерации метки времени с максимальным разрешением, которую обеспечивает ваша ОС (например, микросекунды или наносекунды). Если вы не можете получить функцию отметки времени с достаточно высоким разрешением, увеличьте число итераций, чтобы вы могли провести значимое сравнение.

Также отключите оптимизацию и посмотрите, отличаются ли сгенерированные времена. Посмотрите, сможете ли вы заставить компилятор показать вам эквивалент машинного языка, чтобы получить еще большее понимание.

Автор: clearlight Размещён: 21.03.2015 05:21

1 плюс

98406 Репутация автора

Если у вас нет сильно поврежденного компилятора, все они будут генерировать точно такой же код. Попробуйте и посмотрите на результат каждого.

Автор: Jonathon Reinhart Размещён: 21.03.2015 05:26

4 плюса

162158 Репутация автора

Ну, сначала человечество изобрело следующую запись.

i = i+1; 

Затем, наряду с достижениями в области оборудования, Mainkind изобрел следующую запись

i += 1;

и, наконец, благодаря прогрессу в области компьютерных наук человечество изобрело следующие записи

++i;

а также

i++;

Все эти три формы записей являются выражениями одного и того же набора машинных инструкций (за небольшим исключением для ++ i и i ++, когда они являются частями некоторого более сложного выражения) :) И этот набор машинных инструкций не зависит даже от уровень оптимизации компилятора. :)

PS Конечно, мы обсуждаем эти операторы для основных типов. Нет никакого смысла обсуждать эти операторы для пользовательских типов, потому что они могут быть перегружены различными способами.

Автор: Vlad from Moscow Размещён: 21.03.2015 05:40
Вопросы из категории :
32x32