Нет, для этого нет абсолютно нет детерминированного ответа. Вы смотрите на два разных уровня абстракции.
C ++ не имеет абсолютно ничего , чтобы сказать о том, что происходит под прикрытием с точки зрения производительности. Он определяет виртуальную машину, которая выполняет код C ++, и, хотя он охватывает функциональность, он не покрывает производительность базовой среды (a) .
Какой из них быстрее, будет зависеть от множества факторов. Вы можете работать на процессоре, который не делает различий между сравнением с произвольным значением и сравнением с нулем.
Вы можете найти архитектуру, в которой увеличение регистра в десять раз быстрее, чем уменьшение, хотя это может показаться странным.
Вы можете даже найти умственно отсталую архитектуру, которая вообще не имеет инструкций декремента, сложения или вычитания, и вам нужно эмулировать декремент, вызывая приращение 2 n -1 раз (где n
- это размер слова).
Итог: вы не можете позволить себе знать, что происходит под капотом, если вы не хотите смотреть на очень специфический процессор, компилятор и т. Д.
Сначала вы должны оптимизировать свой код для удобства чтения. Если вам нужно обрабатывать вещи все активнее, используйте первый вариант. Если уменьшается, используйте последний. Если какой-либо из способов выглядит одинаково естественным, выберите самый быстрый, обнаруженный путем сравнительного анализа или анализа базовой архитектуры и ассемблерного кода. Но только делают это, если у вас есть специфическая проблема с производительностью, в противном случае вы теряете усилия.
В любом случае, поскольку вы почти наверняка будете использовать i
для чего-то, вполне вероятно, что любое незначительное увеличение производительности, которое вы получите, идя самым быстрым путем, будет более чем подавлено тот факт, что теперь вы должны вычислять NUM-i
внутри цикла (если, конечно, компилятор не умнее разработчика, что, на основании того, что я видел из gcc
, вполне возможно).
(a) Указывает определенные связанные с производительностью вещи, такие как временная сложность некоторых вещей в библиотеке контейнеров, но не определенно то, о чем вы спрашиваете, будь то прямые или обратные петли быстрее.