首页 > 解决方案 > 相同的代码每次执行时间都不一样

问题描述

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

我正在尝试的代码是这个

#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 毫秒过去了

标签: c

解决方案


3-5 毫秒的偏差是不用担心的。这几乎取决于四舍五入和措施。

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

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

推荐阅读