为什么多次运行同一程序时执行时间有差异?

时间:2016-06-14 13:09:57

标签: c linux time operating-system

可能是一个愚蠢的问题。我注意到在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,并且有足够的可用内存。虽然差别很小,但背后的原因可能是什么呢?

3 个答案:

答案 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)

两个主要原因:

  1. 磁盘缓存:第一次加载可执行文件后,它可能会保留在内存中,以便后续运行不需要从磁盘中获取。

  2. 系统活动:您的处理器在消耗资源(内存,CPU,磁盘访问)的同时还在做什么。