真实的CPU频率和C中的clock_t之间有什么关系?

Jas*_* Yu 6 c posix clock cpu-cycles

真实的CPU频率和C语言中的clock_t(单位是时钟节拍)之间有什么关系?

假设我有下面一段 C 代码,它测量 CPU 运行循环所消耗的时间for
但由于 CLOCKS_PER_SEC 在 C 标准库中是一个常量值(基本上是 1000,000),我想知道该clock函数如何测量程序在具有不同 CPU 频率的不同计算机上运行时所消耗的实际 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;
}
Run Code Online (Sandbox Code Playgroud)

ein*_*ica 7

实际上,clock_t这些值与 CPU 频率无关。

请参阅此处的详细解释。

虽然clock_t-type 值理论上可以代表实际的物理 CPU 时钟周期,但实际上却不然:POSIX 要求等于CLOCKS_PER_SEC1,000,000 - 一百万。因此该函数返回一个以微秒为单位的clock_t值。