Каждая сэкономленная наносекунда имеет значение, когда вы беспокоитесь о скорости. Так что небольшая оптимизация имеет значение, когда вы хотите в целом повысить производительность. Когда вы просматриваете исходный код своего проекта или своего проекта, вы можете найти стандартный цикл for, показанный ниже. Даже будучи разработчиком, включая меня, я писал цикл for, как показано ниже.
for (lnLoopCounter = 0; lnLoopCounter < lnMaxLoopIteratorCount; lnLoopCounter++)
Но есть и другой способ написания цикла for, который кажется трудным для понимания новичкам, но дает лучшую производительность. Второй вариант с лучшей производительностью показан ниже.
for (lnLoopCounter = lnMaxLoopIteratorCount; lnLoopCounter--; )
Я протестировал код с другой итерацией цикла и обнаружил, что второй вариант быстрее.
Результат для времени, затрачиваемого другим циклом в наносекундах на итерации цикла, показан на изображении ниже:
Примечания :
- результаты могут различаться в разных системах.
- библиотека chrono используется для расчета разницы во времени.
Образец кода, написанный мной, приведен ниже для справки.
#include <iostream #include <chrono> int main() { char ch = 'n'; do { long int lnLoopCounter = 0, lnLoop1Variable = 0, lnLoop2Variable = 0; long int lnMaxLoopIteratorCount = 10; std::cout << "Enter loop iteration count : "; std::cin >> lnMaxLoopIteratorCount; // loop 1 start time auto Loop1StartTime = std::chrono::high_resolution_clock::now(); // loop 1 : standard looping used by the developers for (lnLoopCounter = 0; lnLoopCounter < lnMaxLoopIteratorCount; lnLoopCounter++) { ++lnLoop1Variable; // incrementing loop 1 variable } // loop 1 elapsed time auto Loop1ElapsedTime = std::chrono::high_resolution_clock::now() - Loop1StartTime; // calculating loop 1 execution time long long Loop1ExecutionTime = std::chrono::duration_cast<std::chrono::nanoseconds>(Loop1ElapsedTime).count(); // loop 2 start time auto Loop2StartTime = std::chrono::high_resolution_clock::now(); // loop 2 : optimized loop which may be difficult to read but faster execution for (lnLoopCounter = lnMaxLoopIteratorCount; lnLoopCounter--; ) { ++lnLoop2Variable; // incrementing loop 2 variable } // loop 2 elapsed time auto Loop2ElapsedTime = std::chrono::high_resolution_clock::now() - Loop2StartTime; long long Loop2ExecutionTime = std::chrono::duration_cast<std::chrono::nanoseconds>(Loop2ElapsedTime).count(); // calculating loop 2 execution time std::cout << "Value of lnLoop1Variable is " << lnLoop1Variable << " time taken in nanoseconds for loop 1 execution is " << Loop1ExecutionTime << std::endl; std::cout << "Value of lnLoop2Variable is " << lnLoop2Variable << " time taken in nanoseconds for loop 2 execution is " << Loop2ExecutionTime << std::endl; std::cout << std::endl << "Press 'y' and enter to repeat the test. "; std::cin >> ch; std::cout << std::endl; } while (ch == 'y'); return EXIT_SUCCESS; }