可能是一个愚蠢的问题。我注意到在Linux机器上运行Hello World
中的简单C
程序时执行时间不同(虽然它不是语言特定的)。
程序:
#include<stdio.h>
#include<time.h>
int main()
{
clock_t begin, end;
double time_spent;
begin = clock();
printf("%s", "Hello World\n");
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("%f\n", time_spent);
return 0;
}
O / P:
$ ./hello
Hello World
0.000061
$ ./hello
Hello World
0.000057
$ ./hello
Hello World
0.000099
这是在四核机器上测试的,平均负载为0.4,并且有足够的可用内存。虽然差别很小,但背后的原因可能是什么呢?
答案 0 :(得分:6)
除非您正在运行实时操作系统,否则您至少会看到运行时间的轻微变化。这是由于OS调度,可能在那时发生的任何I / O等等。
0.04毫秒的差异根本不是很大的差异。
如果您的程序在循环中运行至少几秒钟,则应减少变异百分比。
答案 1 :(得分:1)
简单的答案是:系统的其他部分发生了什么。
所有这些后台进程都可以处理网络数据包;将数据保存或记录到磁盘;决定醒来并检查当前的网络时间;谁知道!对于代码这么短的时间间隔,这些微小的东西可以产生很大的不同。尝试循环1000次并检查这些结果。当然,输出到屏幕涉及图形,更新,其他程序...也许你应该只做一个:
unsigned i, j;
...
// Wait a LONG time!
for (i=0;i<5u;++i) { // 5 is about a minute on my machine
for (j=0;j<~0u;++j) {
// Twiddle thumbs!
} // for
} // for
在你的时间内。
答案 2 :(得分:0)
两个主要原因:
磁盘缓存:第一次加载可执行文件后,它可能会保留在内存中,以便后续运行不需要从磁盘中获取。
系统活动:您的处理器在消耗资源(内存,CPU,磁盘访问)的同时还在做什么。