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