Top.Mail.Ru
Ответы

Какая операция в C++ быстрее?

Какая из двух операций выполнится быстрее:

++i;
i += 1;

Почему?

По дате
По рейтингу
Аватар пользователя
Мудрец

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

Аватар пользователя
Мудрец

Современные компиляторы очень умные. Скорее всего, результат компиляции будет одинаковый.
Для глупого компилятора первый вариант лучше, поскольку есть машинная команда "увеличить на единицу". Однако, для современно процессора может и нет разницы между операциями inc и add. Первая лучше тем, что короче записывается.

Аватар пользователя
Мудрец

хорошо если учли +/- 1 как inc / dec... А если упустили, то будут действовать по шаблону как говорил Великий Страуструп

Аватар пользователя
Гуру

У синтаксических конструкций скорость измерить нельзя так же как и у чисел или слов.

Аватар пользователя
Гуру

Это не операции а выражения состоящие из операторов и операндов которые должны компилироваться компилятором в машинные инструкции.
А уже при выполнении машиной инструкций можно измерить скорость.

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

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

Аватар пользователя
Гений

Вообще говоря, зависит от компилятора и режима его работы, но в любом случае ++i предпочтительнее. А вот с i++ может быть по-разному :)

Аватар пользователя
Мастер

Разницы особо не будет. Ощутима будет немного если это будет использоваться в ряде циклов или структур данных и то при обращение системой к этому. В остальном скорость компиляции и обработки программы от этого не сильно поменяется а где то будет и вовсе одинаковой.
Сейчас на прямую машинным языком мало смысла писать. Компиляторы давно уже умеют более менее сносно оптимизировать код. А для сложных задач можно и самостоятельно пересобрать как тебе выгоднее.



Видео по теме