有谁知道为什么同一段代码执行两次似乎第一次执行得比第二次更快?
每次第一次执行都比第二次快时,我尝试了大约20次代码。
#include <iostream>
#include <time.h>
void add(int* var) {(*var)++;}
int main()
{
int var = 0;
clock_t tStart;
tStart = clock();
for(int i=450000000;i--;) {add(&var);}
printf("%.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
tStart = clock();
for(int i=450000000;i--;) {add(&var);}
printf("%.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
return 0;
}
它真的很小,但仍然存在差异?
1.28s
1.36s
Program ended with exit code: 0
我会做错什么吗?也许这与我如何计算事物而不是执行速度有关?
由于
答案 0 :(得分:1)
可能有一百万个原因导致执行速度略有不同。它可能在系统进行一些维护的同时运行,系统可能将相同的线程外包给其他进程等。
此外,使用clock()
来衡量性能并不准确,因为它并不真正衡量时间,而是CPU周期。我建议使用std::chrono::high_resolution_clock
。使用示例can be found here。
答案 1 :(得分:0)
您不知道CPU每秒运行的服务或每次运行代码时正在处理的线程。在每次运行时将其视为无状态环境变量。
答案 2 :(得分:0)
正如建议中的问题所提出的那样,关闭优化可以解决问题。
感谢您的帮助!