在C语言中,真实的CPU频率和clock_t(单位为时钟滴答)之间有什么关系呢?
假设我有以下一段C代码,它用于测量CPU运行for
循环所消耗的时间。
但由于标准库中的CLOCKS_PER_SEC是一个常数值(基本上是1000,000),因此我想知道clock
函数如何测量程序在不同计算机上运行时消耗的真实CPU周期(对于我的笔记本电脑,它是2.6GHz)。
如果它们并不相关,那么在所提到的场景中,CPU定时器是如何工作的呢?
#include <time.h>
#include <stdio.h>
int main(void) {
clock_t start_time = clock();
for(int i = 0; i < 10000; i++) {}
clock_t end_time = clock();
printf("%fs\n", (double)(end_time - start_time) / CLOCKS_PER_SEC);
return 0;
}
CLOCKS_PER_SEC
只是给出clock()
返回值的 计量单位。它并不是 "基本上是 1000,000",而是由操作系统/编译器决定应该是什么。例如,在我的系统上它是 1000。这就是为什么它在计时目的上是一个相当粗糙的工具的原因之一 - 它的粒度会因系统而异。 - Weather Vaneclock()
如何工作,或者您是否确实想知道如何测量当前程序所花费的CPU时钟周期。或者也许您想知道如何在多线程(可能是多CPU)环境中测量当前程序所花费的时间。这些都是不同的问题,您应该提出您想要回答的问题,而不是迷失在您认为会给您答案的细节中。 - Yunnosch