Код: Выделить всё
for (int i = 0; i < count; ++i)
...do stuff including function/method calls...;
Код: Выделить всё
int local_count = count;
for (int i = 0; i < local_count; ++i)
...do stuff including function/method calls...;
Предположим, что значение count фактически не меняется в течение цикла. продолжительность цикла. Влияет ли эта разница в стиле кодирования на производительность типичного современного компилятора или нет? Насколько умны компиляторы в определении того, что «это значение не изменится и его не нужно получать повторно»? Обратите внимание: я не спрашиваю о изменчивости, насколько я понимаю; Я спрашиваю о возможности того, что раздел кода dothing изменит значение count (чего, я, не происходит, но компилятор, возможно, этого не делает) знаю).
Это встречается даже в более простых ситуациях, например:
Код: Выделить всё
use non-local variable foo;
...do stuff...;
use non-local variable foo again;
Код: Выделить всё
auto local_foo = foo;
use local_foo;
...do stuff...;
use local_foo again;
(Пожалуйста, не отвечайте на вопрос о преждевременной оптимизации, скажите мне, чтобы я не беспокоился о такие крошечные детали производительности и т. д.; я спрашиваю конкретно о контексте, в котором каждая мелочь производительности действительно имеет значение для рассматриваемого кода. Я работаю над симуляциями, на выполнение которых уходят дни или недели, часто с экстремальными моментами в коротком времени. И, пожалуйста, не говорите мне, что я должен вручную писать такой чувствительный к производительности код на ассемблере, если мне так хочется, но мое программное обеспечение должно работать кроссплатформенно на машинах конечных пользователей; это может быть macOS, Linux или Windows, поэтому сборка не является стартовой, и я действительно не знаю, на каком компиляторе я буду работать. Но мне действительно нужно выжать из компилятора максимальную производительность, насколько это возможно. возможно.)
Подробнее здесь: https://stackoverflow.com/questions/790 ... ion-in-c-c
Мобильная версия