其中计时功能,time,clock getrusage,clock_gettime,gettimeofday和timespec_get,我想清楚地了解它们是如何实现的,为了知道在什么情况下我必须使用他们什么是他们的返回值.
首先,我们需要对返回wall-clock值的函数进行分类,与返回进程或线程值的函数进行比较.gettimeofday返回wall-clock值,clock_gettime返回wall-clock值或进程或线程值,具体取决于Clock传递给它的参数.getrusage并clock返回过程值.
然后第二个问题涉及这些功能的实施,因此,它们的准确性.这些功能使用哪种硬件或软件机制.
似乎getrusage只使用内核tick(通常为1ms长),因此不能比ms更准确.这样对吗?然后该getimeofday函数似乎使用最准确的底层硬件.因此,它的准确性通常是近期硬件上的微秒(因为API而不能更多).那么clock,手册页谈的是"近似",它是什么意思?那么clock_gettime,API是纳秒级,是否意味着如果底层硬件允许它,它能够如此准确?单调性怎么样?
还有其他功能吗?
我正在做一个涉及比较编程语言的项目.我在计算Ackermann函数.我测试了Java,Python和Ruby,并获得了10到30毫秒的响应.但C++似乎需要125毫秒.这是正常的,还是一个问题gettimeofday()? Gettimeofday()是时候了.
我正在测试(虚拟)Ubuntu Natty Narwhal 32位.我不是短处理能力(四核2.13 GHz Intel Xeon).
我的代码在这里:
#include <iostream>
#include <sys/time.h>
using namespace std;
int a(int m,int n) {
if (m == 0) {
return n + 1;
} else if (m > 0 and n == 0) {
return a(m-1,1);
} else if (m > 0 and n > 0) {
return a(m-1,a(m,n-1));
}
}
int main() {
timeval tim;
gettimeofday(&tim,NULL);
double t1 = tim.tv_usec;
int v = a(3,4);
gettimeofday(&tim,NULL);
double t2 = …Run Code Online (Sandbox Code Playgroud)