Linux下C++程序计时方法

jopen 8年前

最近简单学习了下 LinuxC++ 程序计时的一些函数和方法,总结如下。没啥 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;  }
</div>

不难看出, 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;  }
</div>

这里说的都是 wall clock ,如果想获得 cpu 执行时间,以及了解 clock_gettime 参数的解释和可能的取值,可以 man 一下。

</div>

来自: http://www.yebangyu.org/blog/2016/01/07/timingcprograminlinux/