Libc provides the clock function用于测量Linux进程的CPU时间。我想知道这种方法在现代计算机中是否仍然可靠/有意义?为什么" CLOCKS_PER_SEC"是不变的?为什么每台机器都假设每秒1e6指令?而且,现代处理器甚至可以缩放时钟频率。
答案 0 :(得分:1)
不,它不再相关了;它添加时设计很差,不再符合预期的用例。许多细节都被冻结以保持向后兼容性。
请改用POSIX.1-2001 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts)
。理论上,使用它可以达到纳秒精度。
答案 1 :(得分:0)
让我分享一下我的理解。
CLOCKS_PER_SEC与CPU时钟没有直接关系。想象一下,你有抽象计时器,配置频率为每秒1000000个刻度。实际上这个频率非常低,可以通过划分MAIN_CLK在任何地方实现。 如果你的操作系统想要支持POSIX系统调用时钟,那么它必须实现这个clock()系统调用,它返回这个低频率计时器滴答的数量。 这就是为什么你只能使用clock()以1ms的粒度进行测量。