為了測試程序的性能,我們常常需要使用計時函數。在c++中提供了多種實現計時的方式。下面主要說明gettimeofday和clock函數的使用。
gettimeofday獲取的是當前精確時間(1970年1月1日到現在的時間),或者為執行計時,也可以稱之為牆上時間。在程序執行之前獲取一次時間,執行結束之後獲取一次時間,兩次時間之差就是程序真正的執行時間。
而clock為cpu的時間,其中包括用戶代碼,庫函數,系統調用等消耗的時間,但是不包括cpu的空閒時間(進程切換,等待消息消耗的時間)。在多任務的系統中,在涉及到進程切換的時候,clock能獲得某個單一進程在cpu中的執行時間。而gettimeofday只能獲得從程序開始執行到程序執行結束的時間,其中可能包括進程被切換出去的時間。
兩個函數的具體用法如下:
#include#include #include #include using namespace std; struct timeval start1,end1; clock_t begin, finish; int main() { gettimeofday(&start1,NULL); begin = clock() ; //開始計時 int sum = 0; for(int i=0;i<1000000000;i++) { sum += i; } cout << sum << endl; gettimeofday(&end1,NULL); finish = clock(); //結束計時 double timeUse = end1.tv_sec - start1.tv_sec + (end1.tv_usec - start1.tv_usec)/1000000.0; cout << "the time of gettimeofday is " << timeUse << endl; //打印結果 timeUse = (double)(finish - begin) / CLOCKS_PER_SEC; cout << "the time of clock is " << timeUse << endl; //打印結果 return 0; }
xiang@xiang:~/workspace/system_lib$ ./time -1243309312 the time of gettimeofday is 3.09654 the time of clock is 2.92明顯看出gettimeofday的時間長於clock的時間,其中可能就包括了程序被切換出去的而等待的時間。
在並行程序記錄時間的時候,為了獲取從程序開始到程序運行結束的時間一般使用gettimeofday.