4
#include <time.h> 
time_t start,end; 
time (&start);
//code here
time (&end); 
double dif = difftime (end,start); 
printf ("Elasped time is %.2lf seconds.", dif ); 

我的开始时间和结束时间都是 0.000。我不明白错误的来源。

使用 time(start) 和 time(end) 或 start=clock() 和 end=clock() 来计算经过的时间是否更好。

4

6 回答 6

7

在大多数(几乎所有?)系统上,time()只有一秒的粒度,因此无法用它来测量任何亚秒级的时间长度。如果您使用的是 Unix,请尝试gettimeofday改用。

于 2011-05-30T18:05:56.883 回答
4

如果您确实想使用,请clock()确保您了解它仅测量CPU 时间。此外,要转换为秒,您需要除以CLOCKS_PER_SEC.

于 2011-05-30T18:14:58.210 回答
2

简短的代码摘录通常不会花费足够长的时间来运行分析目的。一种常见的技术是多次(数百万)次重复调用,然后将结果时间增量除以迭代计数。伪代码:

计数 = 10,000,000

开始 = 读取当前时间()

循环计数次数:
    我的代码()

结束 = 读取当前时间()

elapsedTotal = 结束 - 开始
elapsedForOneIteration = elapsedTotal / 计数

如果你想要准确性,你可以忽略循环开销。例如:

循环计数次数:
    我的代码()
    我的代码()
并测量 elapsed1(2 x 计数迭代 + 循环开销)

循环计数次数:
    我的代码()
并测量 elapsed2 (计数迭代 + 循环开销)

actualElapsed = elapsed1 - elapsed2
(计算迭代次数——因为其余的项被取消了)
于 2011-05-30T18:17:06.737 回答
0

您的代码运行时间不到一秒钟。

于 2011-05-30T19:06:04.070 回答
0

time有(充其量)第二个决议。如果您的代码运行的时间远少于此,那么您不太可能看到差异。

使用分析器(例如 *nix 上的 gprof, OS X 上的Instruments;对于 Windows,请参阅“使用 Eclipse 时在 Windows 上分析 C 代码”)对代码进行计时。

于 2011-05-30T18:08:27.757 回答
0

您在测量之间使用的代码运行速度太快。刚刚尝试了从 0 到 99,999 的代码打印数字,我得到了

经过的时间为 1.00 秒。

于 2011-05-30T18:12:36.840 回答