一尘不染

为什么C Clock()返回0

linux

我有这样的事情:

clock_t start, end;
start=clock();

something_else();

end=clock();
printf("\nClock cycles are: %d - %d\n",start,end);

而且我总是得到“时钟周期为:0-0”的输出

知道为什么会这样吗?

(仅给出一点点细节,something_else()函数使用蒙哥马利表示法执行从左到右的求幂运算,而且我不确定不确定something_else()函数确实花费了一些不可忽略的时间。)

这是在Linux上。uname -a的结果是:

Linux snowy.*****.ac.uk 2.6.32-71.el6.x86_64 #1 SMP Fri May 20 03:51:51 BST 2011 x86_64 x86_64 x86_64 GNU/Linux


阅读 973

收藏
2020-06-02

共1个答案

一尘不染

clock 该功能不测量CPU时钟周期。

C说:clock “ 从实现定义的仅与程序调用有关的时代开始,就将 实现的最佳近似 返回到程序所使用的处理器时间。”

如果在两次连续clock调用之间,您编程的时间少于该clock函数的一个单位的时间,则可以得到0

POSIX clock将统一定义CLOCKS_PER_SEC为1000000(然后统一为1微秒)。

http://pubs.opengroup.org/onlinepubs/009604499/functions/clock.html

要测量x86 / x64中的时钟周期,可以使用内联汇编来获取CPU时间戳计数器寄存器的时钟计数rdtsc

2020-06-02