Есть ли разница в скорости при выполнении между записью n следующих операций или использованием циклического цикла от 0 до n? - PullRequest
0 голосов
/ 20 декабря 2018

Допустим, я должен выполнить ту же операцию op для n + 1 элементов массива arr.

Есть ли разница в скорости при выполнении между:

op(arr[0]);
op(arr[1]);
...
op(arr[n]);

и

for(i=0; i<=n; i++) {
     op(arr[i]);
}

Или компилятор достаточно умен, чтобы обнаружить цикл for (если n зафиксировано во время компиляции) и преобразовать его в линейное выполнение (если оно на самом деле быстрее)?

1 Ответ

0 голосов
/ 20 декабря 2018

- это достаточно умный компилятор, чтобы ....

Да.Многие компиляторы гораздо лучше справляются с такими микрооптимизациями, что и кодеры.

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


Тем не менее, для выбранной ситуации и с очень хорошо осведомленным кодером, специально созданный код может быть лучше.Но это требует времени, которое может быть потрачено с большими проблемами эффективности.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...