【问题标题】:time vs gettimeofday c ++时间与 gettimeofday c ++
【发布时间】:2013-02-16 00:30:09
【问题描述】:

time 命令返回执行命令所经过的时间。

如果我在命令调用的开头(使用 system() )放置一个“gettimeofday()”,在调用结束时放置一个,并有所不同,结果就不一样了。 (也不是很小的区别)

谁能解释这两种用法之间的确切区别是什么?哪种方法是计时执行调用的最佳方法?

谢谢。

【问题讨论】:

  • 除非你有一个长时间运行的任务,否则time() 是一个糟糕的主意。它只计算秒数,而gettimeofday() 可以返回微秒。
  • 您能否澄清time 是指C 库函数还是shell 命令?您能否举例说明您所看到的差异?
  • 我其实指的是shell命令时间!

标签: c++ time gettimeofday


【解决方案1】:

Unix time 命令测量整个程序的执行时间,包括系统加载二进制文件及其所有库所需的时间,以及程序完成后清理所有内容所需的时间。

另一方面,gettimeofday 只能在您的程序中工作,即在它完成加载之后(用于初始测量)和清理之前(用于最终测量)。

哪个最好?取决于您要测量的内容... ;)

【讨论】:

  • 谢谢!我希望能找到细微的差别!
【解决方案2】:

time() 为单位返回纪元以来的时间。

gettimeofday(): 返回:

struct timeval {
       time_t      tv_sec;     /* seconds */
       suseconds_t tv_usec;    /* microseconds */
};

【讨论】:

    【解决方案3】:

    这完全取决于您的时间安排。如果您想在 内计时,那么time() 可能是您最好的选择。如果您需要比这更高的分辨率,那么我会考虑gettimeofday(),它提供了 微秒 分辨率(1 / 1000000 秒)。

    如果您需要更高的分辨率,请考虑使用clock()CLOCKS_PER_SECOND,只需注意clock() 很少准确描述所用时间,而是使用的CPU 周期数。

    【讨论】:

      【解决方案4】:

      每个时间函数都有不同的精度。在 C++11 中,您将使用 std::chrono:

      using namespace std::chrono;
      
      auto start = high_resolution_clock::now();
      /* do stuff*/
      auto end = high_resolution_clock::now();
      
      float elapsedSeconds = duration_cast<duration<float>>(end-start).count();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-12
        • 1970-01-01
        • 1970-01-01
        • 2021-03-16
        相关资源
        最近更新 更多