最近简单学习了下 Linux 下 C++ 程序计时的一些函数和方法,总结如下。没啥 insight 了。
方法一:
如果是想统计某个程序的运行时间,那么可以使用
time ./a.out
方法二:
如果是想对某个函数或者语句进行计时,那么有别的方法。比如说, gettimeofday
函数。直接贴示例代码:
#include <sys/time.h> void f() { //... } int main() { struct timeval t1, t2; gettimeofday(&t1, NULL); f(); gettimeofday(&t2, NULL); //那么函数f运行所花的时间为 //deltaT = (t2.tv_sec-t1.tv_sec) * 1000000 + t2.tv_usec-t1.tv_usec 微秒 return 0; }
不难看出, gettimeofday
只能精确到微秒;如果想精确到纳秒呢?
方法三:
#include <time.h> void f() { //... } int main() { timespec t1, t2; clock_gettime(CLOCK_MONOTONIC, &t1); f(); clock_gettime(CLOCK_MONOTONIC, &t2); //那么f所花时间为 //deltaT = (t2.tv_sec - t1.tv_sec) * 10^9 + t2.tv_nsec - t1.tv_nsec 纳秒 return 0; }
这里说的都是 wall clock ,如果想获得 cpu 执行时间,以及了解 clock_gettime
参数的解释和可能的取值,可以 man 一下。