源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-07-04 15:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:总结UNIX/LINUX下C++程序计时的方法
[b]前言[/b] 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较。但要精确测量程序的运行时间并不容易,因为进程切换、中断、共享的多用户、网络流量、高速缓存访问及转移预测等因素都会对程序计时产生影响。 下面看看小编为大家整理几个计时方法 [b]方法一:[/b] 如果是想统计某个程序的运行时间,那么可以使用
time ./a.out
[b]方法二:[/b] 如果是想对某个函数或者语句进行计时,那么有别的方法。比如说,[code]gettimeofday[/code]函数。直接贴示例代码:
#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;
}
[code]gettimeofday[/code]只能精确到微秒,并且它受系统时钟的影响(它的原理就是通过读取系统时钟,因此当计时的这段时间里有其他程序修改了系统时钟,那么结果将不准确)。 如果想精确到纳秒呢?继续往下看: [b]方法三:[/b]
#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;
}
这里说的都是[code]wall clock[/code],如果想获得cpu执行时间,以及了解[code]clock_gettime[/code]参数的解释和可能的取值,可以man一下。 [b]总结[/b] 以上就是在UNIX/LINUX下C++程序计时的方法的全部内容,希望本文的内容对大家学习使用C++程序能有所帮助。如有疑问欢迎大家留言讨论。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部