【发布时间】:2011-03-14 05:29:28
【问题描述】:
我想存储事件时间。 我找到了这两个函数,但不知道哪个更快。
【问题讨论】:
标签: c linux datetime time system-calls
我想存储事件时间。 我找到了这两个函数,但不知道哪个更快。
【问题讨论】:
标签: c linux datetime time system-calls
这取决于您的系统;没有更快的标准。我的猜测是它们通常都具有相同的速度。 gettimeofday 更传统,如果您希望您的代码可移植到旧系统,这可能是一个不错的选择。 clock_gettime 有更多功能。
【讨论】:
看看这个discussion。它看起来质量很好,并且与您可能正在寻找的东西密切相关,虽然有点过时。
【讨论】:
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 机器上运行。在您自己的盒子上配置代码。此结果与之前提供的链接中引用的结果完全不同。换句话说,如果有差异,那将是由于实施。
【讨论】:
你不在乎。
如果您经常给他们中的任何一个打电话以至于这很重要,那么您做错了。
导致特定性能问题的配置文件代码并检查它在那里花费了多少时间。如果太多,请考虑重构它以减少调用该函数的频率。
【讨论】:
取决于常数,用于clock_gettime()。对于最快的时钟,有CLOCK_*_COARSE 常量。这些计时器最快,但并不精确。
gettimeofday() 应该返回与clock_gettime(CLOCK_REALTIME) 相同的结果
此外,基准测试结果取决于架构(对于 Linux)。由于 Linux 具有特殊技术 (VDSO) 来消除系统调用以获取时间。这些技术不适用于 X86-32 位架构。请参阅strace 输出。
【讨论】: