我多次从相同的代码调用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 }
答案 0 :(得分:2)
您可以在clock(3) manual页面的第一句中找到解释:
clock()函数返回所用处理器时间的近似值 通过该计划。
特别强调“ 近似 ”部分。
现代CPU可以轻松执行多个乘法指令(例如代码中的指令),这些指令都可以在单个时钟周期内完成。投入混合CPU缓存,流水线操作和抢先式多任务处理,这种测量几乎毫无意义。