首页 > 编程 > C++ > 正文

总结UNIX/LINUX下C++程序计时的方法

2020-01-26 14:28:31
字体:
来源:转载
供稿:网友

前言

良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较。但要精确测量程序的运行时间并不容易,因为进程切换、中断、共享的多用户、网络流量、高速缓存访问及转移预测等因素都会对程序计时产生影响。

下面看看小编为大家整理几个计时方法

方法一:

如果是想统计某个程序的运行时间,那么可以使用

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一下。

总结

以上就是在UNIX/LINUX下C++程序计时的方法的全部内容,希望本文的内容对大家学习使用C++程序能有所帮助。如有疑问欢迎大家留言讨论。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表