6

我正在运行 cpp 代码,但有一件事我注意到在 Windows 7 上,C++ 代码中的 CLOCKS_PER_SEC 给出 1000,而在 linux fedora 16 上给出 1000000。任何人都可以证明这种行为是合理的吗?

4

2 回答 2

4

有什么好辩解的? CLOCKS_PER_SEC是实现定义的,可以是任何东西。所有它都表明它是函数返回的单位 clock()。它甚至没有指示分辨率clock():Posix 要求它为 1000000,无论实际分辨率如何。如果 Windows 返回 1000,那也可能不是实际的分辨率。(我发现我的 Linux 机器的分辨率是 10 毫秒,而我的 Windows 机器是 15 毫秒。)

于 2012-09-03T08:59:14.047 回答
2

基本上该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

于 2012-09-03T08:14:31.817 回答