我有一个C代码,当我尝试计算第一次执行的小块处理代码的时间。它给了我30毫秒,当我关闭exe文件并再次运行它给我1毫秒,这次是计算的时间,每次运行程序时计算值与前一个不同,如果我关闭电脑并转动它,第一次执行时为30 ms,所有其他执行时为1 ms 如何获得相同的时间,我释放所有已用的内存,我运行另一个程序来覆盖内存,但问题直到我重新启动PC才解决 任何帮助
start_time=clock();
Encryption();
end_time=clock();
cpu_time_used_totlal_enc +=(double) (end_time-start_time) / CLOCKS_PER_SEC;
答案 0 :(得分:6)
这个问题叫做“热身”:当你想对某些代码进行性能测试时,你需要多次运行代码(比方说,10次)。然后你运行它100'000次并测量它需要多长时间并将其除以100'000以获得平均值。除非运行时间至少为一分钟,否则单次测量运行时是没用的。
预热问题的原因是现代操作系统和语言会采用各种技巧来使代码执行得更快。例如,对Encryption()
的调用实际上可能会调用共享库中的函数。
这些库是懒惰加载的,即它是在代码实际调用函数时第一次加载的。当它被加载时,操作系统将其保存在缓存中,因为有人可能会再次需要它。
这就是为什么应用程序的前几次运行与下一次运行10'000完全不同的运行时间。