Повлияет ли переназначение переменной на каждой итерации цикла на производительность? - PullRequest
3 голосов
/ 09 октября 2008

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

Стиль 1

boolean found = false;
for(int i = 0; i < list.length && !found; i++)
{
   if(list[i] == testVal)
     found = true;
}

Стиль 2

boolean found = false;
for(int i = 0; i < list.length && !found; i++)
{
   found = (list[i] == testVal);
}

Они эквивалентны, но я всегда использую стиль 1, потому что 1) я нахожу его более читабельным, и 2) я предполагаю, что переназначение found на false сотни раз кажется, что это займет больше времени. Мне интересно: верно ли это второе предположение?

Угол Нитпикера

  • Мне хорошо известно, что это случай преждевременной оптимизации. Это не значит, что это не то, что полезно знать.
  • Мне все равно, какой стиль вы считаете более читабельным. Меня интересует только то, имеет ли одно снижение производительности по сравнению с другим.
  • Я знаю, что у стиля 1 есть преимущество, позволяющее вам также помещать оператор break; в блок if, но мне все равно. Опять же, этот вопрос касается производительности, а не стиля.

Ответы [ 13 ]

0 голосов
/ 09 октября 2008

Это можно измерить только в коде, который чрезвычайно чувствителен к производительности (симуляторы, эмуляторы, программное обеспечение для кодирования видео и т. Д.), И в этом случае вы, возможно, захотите в любом случае вручную проверить сгенерированный код, чтобы убедиться, что компилятор действительно генерирует разумный код.

0 голосов
/ 09 октября 2008

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

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

0 голосов
/ 09 октября 2008

Я бы сказал, что в 98% систем это не имеет значения. Разница, если таковая имеется, вряд ли заметна, если только этот цикл не является основной частью кода и работает с умопомрачительным числом раз.

Edit: Конечно, предполагается, что он еще не оптимизирован компилятором.

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