我想存储活动时间。 我找到了这两个函数,但不知道哪一个更快。
答案 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。它似乎质量很好,与你可能正在寻找的东西密切相关,虽然有点过时了。