Взаимодействие между циклами с функцией часов? - PullRequest
0 голосов
/ 10 июня 2010

Может кто-нибудь объяснить мне точное взаимодействие в контексте задержки между двумя циклами for с функцией часов. Как for1 взаимодействует с for2 в операторе cout (30 на 640000000)?

start=clock();
cout<<endl<<start<<endl;
for(delay=0; delay<30; delay++)
    for(i=0; i<640000000; i++);

end=clock();
cout<<end<<endl;
cout<<"Num of ticks for non reg-loop: ";
cout<<end-start<<'\n';

1 Ответ

2 голосов
/ 10 июня 2010

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

Если это не оптимизировано, два цикла просто работают вокруг факта, что 30 * 640000000 больше, чем может быть сохранено в 32-разрядном целом числе. Он пытается выполнить внутренний цикл 640000000 30 раз, чтобы увеличить задержку.

EDIT: Таким образом, для каждого из 30 раз (с использованием переменной delay) создается новый цикл (с использованием переменной i), начинающийся с 0. Затем он увеличивается i 640000000 раз, причем каждый прирост занимает небольшую долю времени (если не оптимизирован). далеко). Затем внутренний цикл завершается, delay увеличивается на 1, и внутренний цикл снова начинается с 0.

EDIT2: Если вы просто пытаетесь добавить задержку, рассматривали ли вы вопрос об использовании sleep или usleep или соответствующих функций Windows вместо того, чтобы пытаться реализовать спящий режим итерацией?

...