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

Why does ctime clock() give different times when called twice by same program for same operation?

本文关键字:同一个 时间 两次 调用 clock ctime 程序 为什么 操作      更新时间:2023-10-16

我从同一代码多次调用clock()来计算不同操作集所花费的时间。我注意到第一组操作需要更多的时间,即使这些步骤被认为比后面的操作要快。因此,我使用相同的操作集进行测试,如下面的示例代码所示。下面的示例对于set 1返回0.001 ms,对于set 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 }

您可以在时钟(3)手册页的第一句话中找到解释:

clock()函数返回处理器所用时间的近似值

特别强调"近似"部分。

它也没有帮助的事情,一个现代的CPU可以很容易地执行多个乘法指令,就像你的代码中的那些,都在一个时钟滴答的空间。把CPU缓存、流水线和抢占式多任务混合在一起,这种测量几乎没有意义。