Măsurarea timpului de execuție
Apare deseori în practică necesitatea măsurării timpului de execuţie al unui program în C/C++. Acest lucru necesită utilizarea funcţiei clock() care se găseşte în biblioteca <ctime> şi care are antetul:
clock_t clock ( )
Funcţia nu are parametri. Returnează numărul de tic-uri ale ceasului trecute de la execuţia programului. Pentru a calcula efectiv timpul de execuţie a unei secvenţe de program, funcţia clock() trebuie apelată de fapt de două ori: o dată la începutul secvenţei, a doua oară la final:
clock_t timpInitial, timpFinal ; timpInitial = clock() ; // aici se scrie secventa de program căreia i se măsoară timpul timpFinal = clock() ; cout<< (double)(timpFinal - timpInitial)/ CLOCKS_PER_SEC ;
Facem aici următoarele observaţii:
1. clock_t este un tip întreg, deci variabilele timpInitial şi timpFinal puteau fi declarate long şi în acest caz la atribuirea timpInitial = clock() s-ar realiza conversia implicită de la tipul clock_t la tipul long.
2. CLOCKS_PER_SEC este un macro care reprezintă numărul de tic-uri ale ceasului într-o secundă. În locul acestui macro se putea utiliza CLK_TCK, considerat învechit (în engleză, obsolete)
3. Deoarece clock_t este tip întreg, pentru a determina corect timpul de execuţie în expresia
(double)(timpFinal - timpInitial)/ CLOCKS_PER_SEC ; este necesară conversia explicită la un tip real, altfel împărţirea ar fi considerată pe numere întregi, deci o expresie de forma:
(timpFinal - timpInitial)/ CLOCKS_PER_SEC ; ar furniza doar numărul de secunde, nu şi secimi, sutimi etc.
În continuare prezint un program simplu care determină timpul de execuţie al unei instrucţiuni repetitive (este recomandată includerea header-ului ctime)
#include<iostream>
#include<ctime>
using namespace std;
int main()
{
clock_t start, stop ;
start = clock();
for (int i=1 ; i<=500000000 ; i++)
;
stop = clock() ;
cout<<(double)(stop-start)/CLOCKS_PER_SEC ;
return 0;
}