为什么ctime clock()在同一个程序对同一个操作调用两次时给出不同的时间?
Why does ctime clock() give different times when called twice by same program for same operation?
我从同一代码多次调用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缓存、流水线和抢占式多任务混合在一起,这种测量几乎没有意义。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- 为什么std::async使用同一个线程运行函数
- C++在变量给定的指定时间内关闭电脑
- rcpp函数中的清理时间很长
- C++:floor unix时间戳到UTC月份
- 如何在c++中录制具有精确帧时间戳的视频
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- boost:: posix_time.如何在同一个应用程序中表示微秒和纳秒日期时间
- 为什么ctime clock()在同一个程序对同一个操作调用两次时给出不同的时间?