相同代码的执行时间每次都不同

时间:2019-10-23 11:34:28

标签: c

我正在尝试为我将在实验室的实验中使用的某些代码获取准确的执行时间。我在尝试一些简单的代码,但是我总是得到不同的执行时间。您能帮我解决这个问题吗?

我正在尝试的代码是这个

#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>

int main() {
    long start, end;
    struct timeval timecheck;

    gettimeofday(&timecheck, NULL);
    start = (long)timecheck.tv_sec * 1000 + (long)timecheck.tv_usec / 1000;

    usleep(200000);  // 200ms
   for (int i = 0; i < 10000000; ++i)
    {/* 
        code 
    */}

    gettimeofday(&timecheck, NULL);
    end = (long)timecheck.tv_sec * 1000 + (long)timecheck.tv_usec / 1000;

    printf("%ld milliseconds elapsed\n", (end - start));

    return 0;
}

结果像这样

经过227毫秒

经过231毫秒

经过228毫秒

1 个答案:

答案 0 :(得分:3)

3-5毫秒的偏差不是要担心的事情。这几乎要四舍五入。

如果差异更大,那么许多因素都可以在这里发挥作用:

  1. 缓存状态(最近使用的部分内存处理速度更快)
  2. 进程优先级
  3. 多任务处理率(其他进程可能会与您争夺任何类型的资源)
  4. 系统调用延迟(仅用户空间吗?内核空间?)