问题描述
|
#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()来计算经过的时间。
解决方法
在大多数(实际上是所有?)系统上,
time()
的粒度仅为一秒,因此无法用它来测量任何亚秒级的时间长度。如果您使用的是Unix,请尝试使用gettimeofday
。
, 如果您确实想使用clock()
,请确保您了解它仅测量CPU时间。另外,要转换为秒,您需要除以CLOCKS_PER_SEC
。
, 简短的代码摘录通常不会花很长时间来运行以进行概要分析。一种常见的技术是将调用重复很多(百万)次,然后将结果时间增量除以迭代计数。伪代码:
计数= 10,000,000
开始= readCurrentTime()
循环计数时间:
myCode()
结束= readCurrentTime()
elapsedTotal =结束-开始
elapsedForOneIteration = elapsedTotal /计数
如果需要准确性,可以减少循环开销。例如:
循环计数时间:
myCode()
myCode()
并测量经过1(2 x计数迭代+循环开销)
循环计数时间:
myCode()
并测量elapsed2(计数迭代+循环开销)
ActualElapsed =经过的1-经过的2
(计算迭代次数-因为其余术语会被抵消)
, time
(至多)具有第二个分辨率。如果您的代码运行的时间远少于此,则您不太可能看到差异。
使用事件探查器(在* nix上为gprof,在OS X上为Instruments;对于Windows,请参见“使用Eclipse时在Windows上对C代码进行剖析”)来计时代码。
, 在两次测量之间使用的代码运行速度太快。刚尝试过您的代码打印数字,范围是0到99,999,我得到了
擦除时间为1.00秒。
, 您的代码运行不到一秒钟。