我需要在 Linux(和其他类 Unix 系统)上的 C++ 中测量长时间计算所花费的 CPU(不是挂钟)时间,所以我使用的是 clock()。问题:在 32 位系统上,这会在大约 2000 或 4000 秒后回绕。
推荐的解决方法是什么?
您想使用getrusage
填充以下结构:
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
...
};
为了完成,struct timeval
:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
与往常一样,请参阅手册页了解详细信息 ( man getrusage
)
您需要提供的精度clock()
吗?如果没有,您可以使用time()
两次并取差:
time_t start, end;
double diff;
time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);
编辑: time()
测量实时(不是 CPU 时间),正如 litb 在他的评论中指出的那样,但clock()
. 如果你想测量 CPU 时间,你应该遵循 litb 的建议并使用getrusage()
.
另一种可能的方法是使用 gettimeofday() 两次,因为它返回毫秒精度。
定期获取时间并在每次翻转时增加一个乘数变量 int?