为什么ctime clock()在同一个程序中被同一个程序调用两次时会给出不同的时间?

时间:2016-08-27 01:54:10

标签: c++ c

我多次从相同的代码调用clock()来计算不同操作集所花费的时间。我注意到第一组操作需要更多时间,即使这些步骤比后面的操作集更快。所以我测试了相同的操作集,如下面给出的示例代码所示。以下示例对于集合1返回0.001 ms,对于集合2返回~0 ms,尽管set 1和set 2是相同的操作。对此行为的任何解释?

示例代码:

  1 #include <iostream>
  2 #include <ctime>
  3 
  4 using namespace std;
  5 
  6 int main()
  7 {
  8     int x = 1000000;
  9 
 10     //Set 1:
 11     clock_t t0 = clock();
 12     int y = x * x;
 13     y *= x;
 14     t0 = clock() - t0;
 15     
 16     //Set 2:
 17     clock_t t1 = clock();
 18     int z = x * x;
 19     z *= x;
 20     t1 = clock() - t1;
 21     
 22     cout << "Set1 : " << (double)t0/CLOCKS_PER_SEC * 1000 << " ms." << endl;
 23     cout << "Set2 : " << (double)t1/CLOCKS_PER_SEC * 1000 << " ms." << endl;
 24     
 25     return 0;
 26 }

1 个答案:

答案 0 :(得分:2)

您可以在clock(3) manual页面的第一句中找到解释:

  

clock()函数返回所用处理器时间的近似值   通过该计划。

特别强调“ 近似 ”部分。

现代CPU可以轻松执行多个乘法指令(例如代码中的指令),这些指令都可以在单个时钟周期内完成。投入混合CPU缓存,流水线操作和抢先式多任务处理,这种测量几乎毫无意义。