我将 unistd.h
的 clock()
的值分配给两个 int
类型,如下所示:
int start_time = clock();
for (i = 0; i < 1000000; i++) {
printf("%d\n", i+1);
}
int end_time = clock();
但是,当我打印它们的值时,实际经过的时间与显示的时间不同 . 假设时钟周期为微秒,POSIX标准声明 CLOCKS_PER_SEC
必须等于一百万 . 时钟是不是达到了标准所期望的速度,还是我的循环在计算中引起了一些奇怪?
我试图以类似的方式测量不同操作的速度,并且一个不准确的时钟破坏了我的实验 .
1 回答
你的处理器很快 . 你的I / O不是那么多 .
执行代码后,处理器将使用硬件获得时间并将其分配给
start_time
. 然后,它将通过循环并在输出缓冲区中放入100万行 . 将内容放入输出缓冲区并不意味着处理器已经完成了它们的显示 .这就是为什么你得到不到一秒钟来完成这个过程,但看到输出几秒钟 .
编辑:只是为了澄清,似乎短语"Putting things in output buffer does not mean processor has done displaying them"引入了混乱 . 这是从执行过程的角度编写的,并不意味着处理器将所有输出一次性放入输出缓冲区 .
实际发生的事情(正如n.m.所指出的)是这样的:
clock()
实际上返回了处理时间,而不是一天中的时间 . 并且由于输出缓冲区很小并且处理器在刷新缓冲区后必须等待很长时间,因此处理时间将远远小于实际执行时间 . 因此,从过程的角度来看,执行看起来很快,但输出显示非常慢 .