0

但是,如果我使用以下方法,我想测量我的 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 的 massif 工具确实显示了快照所用的时间,但文档没有提到它是以毫秒还是微秒为单位的。

请推荐一个合适的方法?

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

4

3 回答 3

0

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

clock_t start = clock();     
 // Code here...
clock_t ticks = clock()-start;     
std::cout << "Time Taken:" << (double)ticks/CLOCKS_PER_SEC << "\n"; 
于 2012-07-02T02:24:44.960 回答
0

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

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

于 2012-07-02T02:34:48.133 回答
0

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

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

于 2012-07-02T03:15:43.100 回答