繁体   English   中英

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

[英]Why is there a difference in execution time while running the same program multiple times?

可能是一个愚蠢的问题。 我注意到在Linux机器上运行C的简单Hello World程序时执行时间的差异(虽然它不是语言特定的)。

程序:

#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,并且有足够的可用内存。 虽然差异很小,但背后的原因是什么呢?

除非您运行的是实时操作系统,否则您至少会看到运行时间略有不同。 这是由于OS调度,当时可能发生的任何I / O等。

0.04毫秒的差异根本不是很大的差异。

如果程序在循环中运行至少几秒钟,则应减少变异百分比。

简单的答案是:系统其余部分发生了什么。

所有这些后台进程都做'填充':处理网络数据包; 将数据保存或记录到磁盘; 决定醒来并检查当前的网络时间; 谁知道! 对于代码这么短的时间间隔,这些微小的东西可以产生很大的不同。 尝试循环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

在你的时间内。

两个主要原因:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM