Страницы

Поиск по вопросам

пятница, 29 марта 2019 г.

Есть ли разница между объявлением переменной в цикле и за пределами цикла?

Есть ли разница, в объявлении переменной за пределами цикла:
int val = 0; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { val++; } }
И в цикле:
for (int i = 0; i < 10; i++) { int val = 0; for (int j = 0; j < 10; j++) { val++; } }
Значение переменной val на выходе будет разным - это понятно. Но вопрос в том, влияет ли это на производительность. Обрабатывает ли это компилятор.
Я прогонял тесты с большим количеством итераций, по времени разницы не было. Но по логике вроде как должна была быть. Компилятор оптимизировал код?


Ответ

Компилятор имеет полное право, код
for (int i = 0; i < 10; i++) { int val = 0; for (int j = 0; j < 10; j++) { val++; } }
превратить в
int val; for (int i = 0; i < 10; i++) { val = 0; for (int j = 0; j < 10; j++) { val++; } }
и насколько я знаю он так и делает, в результате получается одно лишнее присвоение, что мало сказывается на производительности.
P.S. Вообще можно декомпилировать сгенеренный код и посмотреть, благо в какой-нибудь Идеа это делается легко и просто.

Комментариев нет:

Отправить комментарий