更新:操作员错误.. :(第二个循环是第一个循环的1/10。错字。修正后的数字更接近。
在下面的代码片段中,我将使用clock()和clock_gettime()来测量循环所需的时间。它是64位Ubunutu。 CLOCK_PER_SEC值为1000000.
int main() {
struct timespec ts, te;
clock_t s, e;
int i, temp = 0;;
s = clock();
for (i = 0; i < 10000; i++) {
temp += i;
}
e = clock();
printf("%.6f\n", 1.0 * (e-s)/CLOCKS_PER_SEC);
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);
for (i = 0; i < 1000; i++) {
temp += i;
}
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &te);
printf("%lu %lu\n", (long)(te.tv_sec - ts.tv_sec),
(long)(te.tv_nsec - ts.tv_nsec));
}
一个样本输出..(在多次运行中我看到它们在相同的范围内)
0.000068
0 4449
在使用clock_gettime()的测量中,循环耗时约为4000纳秒(约4微秒)。但是使用clock()的测量值为68微秒。
为什么clock()关闭幅度如此之大?