哪一个更快,getimeofday或clock_gettime?

时间:2010-07-10 10:49:32

标签: c linux datetime time system-calls

我想存储活动时间。 我找到了这两个函数,但不知道哪一个更快。

5 个答案:

答案 0 :(得分:4)

int main()
{
    struct timespec tp;
    struct timeval tv;
    int i=0;
    int j=0;
    for(i=0; i < 500000; i++)
    {
        gettimeofday(&tv, NULL);
        j+= tv.tv_usec%2;
        clock_gettime(CLOCK_HIGHRES, &tp);
        j+=tp.tv_sec%2;
    }
    return 0;

}



 %Time Seconds Cumsecs  #Calls   msec/call  Name
  68.3    0.28    0.28  500000      0.0006  __clock_gettime
  22.0    0.09    0.37  500000      0.0002  _gettimeofday
   7.3    0.03    0.40 1000009      0.0000  _mcount
   2.4    0.01    0.41       1     10.      main
   0.0    0.00    0.41       4      0.      atexit
   0.0    0.00    0.41       1      0.      _exithandle
   0.0    0.00    0.41       1      0.      _fpsetsticky
   0.0    0.00    0.41       1      0.      _profil
   0.0    0.00    0.41       1      0.      exit

这是在Solaris 9 v440上运行的。在您自己的盒子上描述代码。此结果与先前提供的链接中引用的结果完全不同。换句话说,如果存在差异,那将是由于这种不确定性。

答案 1 :(得分:3)

这取决于你的系统;没有哪个标准更快。我的猜测是他们通常都是以相同的速度。 gettimeofday更传统,如果您希望您的代码可以移植到旧系统,那么这可能是一个不错的选择。 clock_gettime有更多功能。

答案 2 :(得分:2)

你不在乎。

如果你经常打电话给他们中的任何一个,那就很重要了,你做错了。

导致特定性能问题的配置文件代码,并检查它在那里花费的时间。如果它太多,可以考虑重构它以减少对函数的调用。

答案 3 :(得分:0)

取决于常量,在CLOCK_*_COARSE中使用。对于最快的时钟,有gettimeofday()个常量。这些计时器速度最快,但不准确。

clock_gettime(CLOCK_REALTIME)应返回与strace

相同的内容

此外,基准测试结果取决于架构(适用于Linux)。由于Linux有特殊技术(VDSO)来消除系统调用以获得时间。这些技术不适用于X86-32bit架构。请参阅vapply输出。

答案 4 :(得分:-2)

看看这个discussion。它似乎质量很好,与你可能正在寻找的东西密切相关,虽然有点过时了。