如何衡量程序所花费的时间

How to measure the amount of time taken by program

本文关键字:时间 何衡量 程序      更新时间:2023-10-16
我想

测量我的C++程序所花费的时间,但是,如果我使用:

time_t begin, end;
time_t(&begin);
func(); //my function...it contains the code whose elapsed time I want to measure
time(&end);
cout<<"n Time elapsed:"<<difftime(end, begin) <<" seconds"<<endl;

我得到的时间是 0 秒。

gprof 在我的情况下也不起作用,因为它表明它无法按照我的程序的要求分配内存量。

有没有其他方法可以衡量我的程序所需的时间。Valgrind的地块工具确实显示了快照所花费的时间,但文档没有提到它是以毫秒还是微秒为单位。

请建议一个合适的方法?

如果我能以毫秒为单位测量时间,那就太好了。

使用 std::chrono。
http://en.cppreference.com/w/cpp/chrono/duration

您可能还想查看Facebook的基准测试实用程序。
https://github.com/facebook/folly/blob/master/folly/docs/Benchmark.md

您可以使用如下所示的代码。

clock_t start = clock();     
 // Code here...
clock_t ticks = clock()-start;     
std::cout << "Time Taken:" << (double)ticks/CLOCKS_PER_SEC << "n"; 

一种可能性是自己生成程序(CreateProcess在Windows上,fork在类Unix系统上)。然后,等待孩子退出(在Windows上WaitForSingleObject,在Unix上waitpid)。最后,获取子进程的时间(在Windows上GetProcessTimes,在Unix上times)。

这将以毫秒为单位给出时间,并将墙壁时间与 CPU 时间分开。当您在同一系统上同时运行其他东西时,后者特别方便(使用静态系统仍然可以获得更好的准确性,但可以保持相当接近)。