c++ - 为什么同一次执行的时间不同?

标签 c++ c time operating-system

我正在使用 clock() 计算方法的时间,它为同一方法提供了不同的值。

为什么会这样?

for(int i=0;i<10;i++){
    start = clock();
    x=FindPrimeNumber(900);
    end = clock();
    cout << end <<" "<< start  <<endl;
}

我使用#pragma optimize( "", off ) 禁用了 JIT 优化 同样的事情

time: 258 time: 255 time: 253 time: 253 time: 251 time: 253 time: 251 time: 254 time: 253 time: 252

第二个问题,我们如何才能只计算像 clock() 这样的方法的 cpu 时间,但只计算 cpu 时间?

Windows 的量子值(value)是多少? (比如 40 微秒) 一个量子是其他进程可以在 cpu 上运行的时间?

谢谢大家

最佳答案

这是操作系统不确定性的一部分。您可以在(看似)相同的条件下运行您的程序,并且它可能运行得更快或更慢,具体取决于:

  • 有多少个可运行进程?
  • 可运行进程的行为如何? (高 IO?高 CPU?)

您的进程的优先级甚至可以在执行期间发生变化。例如,如果你的进程正在使用它的整个时间片,它可能会被移动到调度队列中的较低级别,这意味着你的程序运行频率会降低(操作系统预测 future 的高使用率)。

无法保证您的进程会在特定时间在 CPU 上运行。


我对你第二个问题的回答:为什么不考虑方法的开始和结束时间,你为什么不只计算开始和结束之间的差值呢?

int start = clock();
methodCall();
int elapsedTime = clock() - start;

就像我之前说的,每次运行它不会给你相同的结果。但是,这应该可以让您大致了解您的方法需要多长时间才能完成。

最后一点:在为平台构建代码时,无论是 Windows、Mac OSX 还是 Linux,您都不应该担心时间片有多长。您的进程无法检测到它何时从 CPU 上取下(或者至少在它重新打开之前不会)。

进程是操作系统提供的抽象,它使我们不必担心进程管理方式的复杂细节。

关于c++ - 为什么同一次执行的时间不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29705922/

相关文章:

Javascript 时间戳,如果 10 分钟过去了。

c++ - 通过引用将变量传递给另一个类

c - 在 Linux 上显示视频

c - 用C编写系统调用,如何将整数值打印到文件

c - 有没有办法让 gcc 或 clang 对显式强制转换发出警告?

performance - 如何从 curl 请求获取响应时间(通过命令行)

没有秒的Django TimeField模型

c++ - 在 C++ 类的方法中传输动态分配的矩阵

c++ - 为什么成员变量不能共享?

c++ - 使用 extern 'C' 后有没有办法重新启用名称修改?