1

我有一个 C 代码,当我尝试计算第一次执行的小段处理代码的时间时。它给了我 30 毫秒,当我打开 exe 文件并再次运行它时,它给了我 1 毫秒,这次是计算时间,每次我运行程序时计算值都与前一次不同,如果我关闭PC并打开它,第一次执行给我30毫秒,所有其他执行给我1毫秒我怎样才能得到相同的时间,我释放所有使用的内存并运行另一个程序来覆盖内存但是问题直到我重新启动PC才能解决任何帮助

start_time=clock();
Encryption();
end_time=clock();
cpu_time_used_totlal_enc +=(double) (end_time-start_time) / CLOCKS_PER_SEC;
4

1 回答 1

6

这个问题被称为“预热”:当你想对一些代码进行性能测试时,你需要多次运行代码(比如 10 次)。然后你运行它 100'000 次并测量它需要多长时间并将其除以 100'000 以获得平均值。运行时间的单一测量是没有用的,除非运行时间至少是一分钟。

热身问题的原因是现代操作系统和语言会使用各种技巧来使您的代码执行得更快。例如,调用Encryption()可能实际调用共享库中的函数。

这些库是延迟加载的,即在您的代码实际调用函数时第一次加载。加载后,操作系统会将其保存在缓存中,因为可能有人会再次需要它。

这就是为什么应用程序的前几次运行与接下来的 10,000 次运行具有完全不同的运行时间。

于 2013-05-15T15:10:19.057 回答