Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么时间总是在变化?_C - Fatal编程技术网

C 为什么时间总是在变化?

C 为什么时间总是在变化?,c,C,我执行了一个程序,当我计算经过的时间时,我发现时间不是常数。它在一定范围内变化。我想知道为什么会这样?因为有许多进程与应用程序同时运行 即使您成功地将应用程序完全隔离,也不能保证每次都以相同的速度运行相同的代码。这就是为什么如果您正在测试性能(假设您在这里所做的就是这样),那么您应该在多次运行中获得平均值 如果您要衡量效率,有更多客观/正式的定义方法: 请参见:在测量经过的时间时,您经常会发现这种行为。这是因为运行时间取决于计算机可能执行的所有其他操作 例如,见: pax> time sl

我执行了一个程序,当我计算经过的时间时,我发现时间不是常数。它在一定范围内变化。我想知道为什么会这样?

因为有许多进程与应用程序同时运行

即使您成功地将应用程序完全隔离,也不能保证每次都以相同的速度运行相同的代码。这就是为什么如果您正在测试性能(假设您在这里所做的就是这样),那么您应该在多次运行中获得平均值

如果您要衡量效率,有更多客观/正式的定义方法:

请参见:

在测量经过的时间时,您经常会发现这种行为。这是因为运行时间取决于计算机可能执行的所有其他操作

例如,见:

pax> time sleep 1
real  0m1.012s
user  0m0.004s
sys   0m0.000s

pax> time sleep 1
real  0m1.002s
user  0m0.004s
sys   0m0.000s

pax> time sleep 1
real  0m1.007s
user  0m0.004s
sys   0m0.000s
在所有这些情况下,经过的
real
时间各不相同,但处理器的实际使用,
user+sys
非常一致

对于计时,应使用最精确的测量值(如
user+sys
)来消除外部影响。您还应该使用统计技术来获得更准确的图片


例如,我倾向于做12次运行,扔掉异常值(最快和最慢),然后平均剩下的10次。

因为你的计算机做的不止一件事。没有什么是恒定的(除了
const
):p唯一不变的是“Change”。这里
user+sys
是一致的,因为代码微不足道。由于缓存污染、资源争用(例如,如果多个进程正在执行io)等原因,如果其他进程正在运行,则实际代码的用户时间和系统时间将大不相同,但我要说的是使用尽可能精确的度量-
user+sys
仍然比经过的时间更精确,统计平均值将减轻其他因素的影响。