【发布时间】:2011-02-16 08:13:29
【问题描述】:
我有一个实验库,我正在尝试衡量其性能。为此,我编写了以下内容:
struct timeval begin;
gettimeofday(&begin, NULL);
{
// Experiment!
}
struct timeval end;
gettimeofday(&end, NULL);
// Print the time it took!
std::cout << "Time: " << 100000 * (end.tv_sec - begin.tv_sec) + (end.tv_usec - begin.tv_usec) << std::endl;
有时,我的结果会包含负时间,其中一些是荒谬的。例如:
Time: 226762
Time: 220222
Time: 210883
Time: -688976
发生了什么事?
【问题讨论】:
-
你会得到否定,因为 timeval 是一个多组件结构。简而言之,由秒和微秒组成。如果您天真地将第二台电视中的常见组件与第一台电视进行区分,您将得到否定。例如,将 tv1 视为距纪元 1 秒 3 微秒,而 tv2 距纪元 4 秒和 1 微秒。如您所见,您现在在 usec 组件之间的差异中得到一个负值。
-
这个问题你有 4 个答案,其中没有一个接近于提供正确答案,但你仍然选择了最不相关的一个作为最终答案。
-
有趣的补充,但仅在使用其中一个组件时才相关,就像我正在做的那样(仅使用 tv_usec 组件,而不是 tv_sec 组件)。
标签: c++ c linux timing gettimeofday