Циклы быстрее, если в них ничего нет? - PullRequest
1 голос
/ 14 апреля 2020

Это может быть глупый вопрос, и, очевидно, все будет быстрее, если внутри функции ничего нет, потому что ей ничего не нужно обрабатывать. Тем не менее, я возился с SFML и решил попробовать поставить свою программу на l oop (поскольку каждая игра l oop равна 1 кадру).

Я сделал al oop, что считается до 50 000 000 за каждый 1 кадр, и, честно говоря, он все еще работал на скорости 10 FPS. Тем не менее, после того, как я поместил std::cout << index << std::endl;, программа не завершила один кадр в и посчитала 1000 каждые 10i sh секунд.

Имеет ли al oop ничего внутри, действительно ли это так много быстрее?

1 Ответ

4 голосов
/ 14 апреля 2020

Если ваш l oop не имеет ничего в своем теле и считает только:

for (int i = 0; i < 50; ++i) {}

Тогда любой приличный оптимизатор просто удалит весь l oop, поэтому даже подсчет не будет выполнен , Причина в том, что побочный эффект отсутствует, поэтому удаление l oop дает эквивалентную программу.

Даже если позже вы распечатаете переменную счетчика i, большинство оптимизаторов все равно смогут удалить l oop, потому что они знают, что i будет 50 после l oop.

Поэтому «пустые» циклы, которые можно оптимизировать, бесконечно быстрее.

...