2010-07-10 85 views

回答

3

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

-2

看看这个discussion。它看起来质量很好,与你可能要查找的有点过时的东西非常接近。

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盒子上运行。在您自己的盒子上分析代码。这个结果与之前提供的链接中引用的结果完全不同。换句话说,如果存在差异,那将是由于隐含的原因。

2

你不在乎。

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

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

+1

如果你用这种方式回答问题,你做错了:-)也许他想写他自己的分析器?这些函数的执行时间本身可能会影响它们传递的结果。 – hirschhornsalz 2016-04-15 10:04:08

0

取决于常数,用于clock_gettime()。对于最快的时钟,常量有CLOCK_*_COARSE。这些定时器是最快的,但并不精确。

gettimeofday()应返回相同的clock_gettime(CLOCK_REALTIME)

此外,基准测试结果取决于架构(Linux版)。由于Linux有专门的技术(VDSO)来消除系统调用以获得时间。这些技术在X86-32bit架构上无法使用。请参阅strace输出。