Есть ли разница, в объявлении переменной за пределами цикла:
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. Вообще можно декомпилировать сгенеренный код и посмотреть, благо в какой-нибудь Идеа это делается легко и просто.
Комментариев нет:
Отправить комментарий