Разница оптимизации цикла для - PullRequest
0 голосов
/ 03 мая 2019

Есть ли разница между этими двумя с точки зрения эффективности?Второй более оптимизирован?Я скомпилировал первый код, а затем декомпилировал его, получив второй код.

for (i = 0; i < n; ++i) {
    if (a[i] == x) {
        printf("%d", a[i]);
        return 0;
    }
}
return 1;

i = 0;
while (1) {
    if (n <= i)
        return 1;
    if (a[i] == x)
        break;
    i = i + 1;
}
printf("%d", a[i]);
return 0;

1 Ответ

1 голос
/ 03 мая 2019

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

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

Вывод понятен:

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