我正在运行 cpp 代码,但有一件事我注意到在 Windows 7 上,C++ 代码中的 CLOCKS_PER_SEC 给出 1000,而在 linux fedora 16 上给出 1000000。任何人都可以证明这种行为是合理的吗?
2 回答
有什么好辩解的? CLOCKS_PER_SEC
是实现定义的,可以是任何东西。所有它都表明它是函数返回的单位
clock()
。它甚至没有指示分辨率clock()
:Posix 要求它为 1000000,无论实际分辨率如何。如果 Windows 返回 1000,那也可能不是实际的分辨率。(我发现我的 Linux 机器的分辨率是 10 毫秒,而我的 Windows 机器是 15 毫秒。)
基本上该clock()
功能的实现对于不同的操作系统都有一定的余地。在 Linux Fedora 上,时钟走得更快。它每秒滴答一百万次。
这个时钟滴答与 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