計算函數的執行時間,粒度比較小,往往也能從中發現項目代碼的瓶頸,及時發現問題來提升系統的性能。
c++代碼時間的估算首先考慮幾個時間函數:clock_gettime( ) 、gettimeofday()、_ftime()、time(),其中clock_gettime( ) 提供了納秒級的精確度,更加准確,可以選用。
同時要考慮到往函數注入時間計算函數的時候,對於原代碼要考慮易用性,盡量使用配置或者宏等形式來簡單設置便能做時間統計,下面的例子使用的是加上編譯宏這個方法。
例子:
#ifdef DEBUG_CODES_TIME
void timer_start(timespec *aStartTime)
{
clock_gettime(CLOCK_REALTIME, aStartTime);
}
long timer_end(timespec *aStartTime)
{
timespec endTime;
clock_gettime(CLOCK_REALTIME, &endTime);
long totalTimeMs = (endTime.tv_sec * 1000 + endTime.tv_nsec / 1000000) - (aStartTime->tv_sec * 1000 + aStartTime->tv_nsec / 1000000);
return totalTimeMs;
}
__attribute((constructor)) void timing_init()
{
;//... ... 針對具體情況進行初始化
}
#else
#define timer_start(ts)
#define timer_end(ts) -1
#endif
int main()
{
timespec ts;
timer_start(&ts);
for(int i=0; i<1000000; ++i);
long ret = timer_end(&ts);
printf("Result: %ld \n",ret);
return 0;
}
$g++ test_timer.c
-DDEBUG_CODES_TIME -lrt
$./a.out
(debug) initialize timing clock to 0.010000 seconds
Result: 4
$g++ test_timer.c
$./a.out
Result: -1