Является ли предпочтительным предварительное вычисление части условия условия цикла for? - PullRequest
0 голосов
/ 30 декабря 2018

Например,

int offset = getOffset();
int count = getCount();
int limit = count + offset;
for (int i; i < limit; i++) {}

предпочтительнее, чем

int offset = getOffset();
int count = getCount();
for (int i; i < offset + count; i++) {}

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

1 Ответ

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

Преждевременная оптимизация - корень всего зла.

Не беспокойтесь об этом сейчас.


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

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


Итак, пока пишите код в соответствии с тем, что вы думаете в своей голове.Для меня, например, если я думаю «теперь мне нужно повторить это (смещение + счет) раз ...», я напишу

for (int i = 0 ; i < offset + count ; i++)

Если я думаю «сейчас», мне нужно рассчитатьсколько раз мы зациклимся, а потом я зациклюсь столько раз ", тогда я бы написал:

int limit = offset + count;
for (int i = 0 ; i < limit ; i++)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...