我在运行32位版本Debian 6.0.3的机器上使用clock()
时遇到问题。它似乎总是返回0
。当使用这个示例程序时,我得到以下输出:
Calculating...
The number of primes lower than 100,000 is: 9592
It took me 0 clicks (0.000000 seconds).
然而,在VMWare虚拟机中运行的同一系统会产生预期的输出:
It took me 60000 clicks (0.060000 seconds).
这里可能有什么问题?有没有更好的可移植方法来对生成的代码和主机的处理能力进行基准测试?(我需要这个来进行快速和肮脏的bcrypt基准测试)。
也许你的机器太快了,clock
的分辨率只有微秒。
没有其他可移植的方法可以单独在C中实现这一点,甚至这一点也可能受到质疑,因为大型软件供应商的clock
返回的是wallclock时间,而不是cpu时间。
由于您使用的是POSIX系统,我建议使用它提供的工具,即clock_gettime
和时钟CLOCK_PROCESS_CPUTIME_ID
或CLOCK_THREAD_CPUTIME_ID
。现代Linux很好地支持它们。
如果您需要一个适用于这三种功能(Linux、Windows、Mac)的函数,请使用POSIX版本作为默认版本,并为Windows和Mac创建回退。两者似乎都不符合标准;Windows甚至不符合C标准,Mac也不符合现代POSIX。这使您可以维护两个异常代码,我希望这不会太难。