CLOCKS_PER_SEC在不同操作系统中的行为

Behaviour of CLOCKS_PER_SEC in different Operating Systems

本文关键字:操作系统 PER SEC CLOCKS      更新时间:2023-10-16

我正在运行一个cpp代码,但有一件事我注意到,在windows 7上,C++代码中的CLOCKS_PER_SEC给出1000,而在linux fedora 16上给出1000000。有人能为这种行为辩解吗?

什么是正当的?CLOCKS_PER_SEC是实现定义的,并且可以什么都可以。All it指示函数返回的单位CCD_ 2。它甚至没有表明clock():Posix的分辨率要求它为1000000,而不管实际分辨率如何。如果Windows返回1000,这可能不是实际的分辨率任何一个(我发现我的Linux盒子的分辨率是10ms,我的Windows盒子是15ms。)

基本上,clock()函数的实现对于不同的操作系统有一些余地。在Linux Fedora上,时钟滴答作响。它每秒滴答作响100万次。

在不同的抽象层上,这个时钟节拍与CPU的时钟速率不同。Windows尝试使时钟刻度数等于毫秒数

此宏扩展为表示时钟数的表达式函数时钟返回的一秒钟内的滴答声。

时钟刻度计数除以此表达式得到的数字秒。

CLK_TCK是该宏的一个过时别名。

参考:http://www.cplusplus.com/reference/clibrary/ctime/CLOCKS_PER_SEC/

您还应该知道,Windows实现不适用于真正的实时应用程序。1000刻度时钟是通过将硬件时钟除以2的幂得出的。这意味着他们实际上得到了1024个刻度的时钟。要将其转换为1000刻度时钟,Windows将跳过某些刻度,这意味着某些刻度比其他刻度慢!

单独的硬件时钟(而不是CPU时钟)通常用于定时。参考:http://en.wikipedia.org/wiki/Real-time_clock