我有一些代码,试图确定一个代码块的执行时间。
#include <time.h>
#include <stdio.h>
int main()
{
clock_t start_t, end_t, total_t;
int i;
start_t = clock(); //clock start
printf("Starting of the program, start_t = %ld\n", start_t);
printf("Going to scan a big loop, start_t = %ld\n", start_t);
for(i=0; i< 10000000; i++) //trying to determine execution time of this block
{
}
end_t = clock(); //clock stopped
printf("End of the big loop, end_t = %ld\n", end_t);
total_t = (long int)(end_t - start_t);
printf("Total time taken by CPU: %lu\n", total_t );
return(0);
}
我的机器上运行这段代码的输出结果是:
Starting of the program, start_t = 8965
Going to scan a big loop, start_t = 8965
End of the big loop, end_t = 27259
Total time taken by CPU: 18294
假设我的CPU运行频率为21 MHz,假设这是唯一正在执行的任务,那么每个机器周期大约等于47纳秒,因此(18294 * 47)=859818纳秒。
这会成为我代码中for循环的执行时间吗?我是否有一些错误的假设。
total_t
)除以CLOCKS_PER_SEC
。请注意,您需要将total_t
强制转换为浮点值才能正常工作。 - Some programmer dude_t
后缀结尾的符号通常用于类型别名(通过typedef
创建)。例如size_t
、time_t
甚至是clock_t
。 - Some programmer dudeCLOCKS_PER_SEC
在不同平台上不同的原因是因为“滴答声”是平台相关的。它不仅取决于硬件,还取决于操作系统。分辨率和精度是您必须在操作系统文档中找到的内容。可靠且可移植获取秒数的唯一方法是将(浮点)差异除以CLOCKS_PER_SEC
。否则这些数字本身就没有太多意义。 - Some programmer dudeclock
函数或其内部工作方式。但是,根据操作系统,可能会有更高分辨率的计时器可用。如果你在一个只有最小操作系统的嵌入式系统上,则硬件可能有可替代使用的计时器。 - Some programmer dude