时钟()返回C中的负值

时钟()返回C中的负值,c,clock,time.h,time-t,C,Clock,Time.h,Time T,我正在使用一个非常简单的代码来测量执行时间。它运行良好,直到我不确定可能不超过20分钟。但在(>20分钟)之后,它返回了负面结果。我在整个论坛中搜索,并尝试了各种方法,例如更改数据类型,使用长未签名(返回0),但再次失败。 下面是我的代码片段 main() { time_t start,stop; double time_arm; start = clock(); /* ....... */ stop = clock(); time_arm=(

我正在使用一个非常简单的代码来测量执行时间。它运行良好,直到我不确定可能不超过20分钟。但在(>20分钟)之后,它返回了负面结果。我在整个论坛中搜索,并尝试了各种方法,例如更改数据类型,使用长未签名(返回0),但再次失败。 下面是我的代码片段

main()
{
    time_t start,stop;
    double time_arm;
    start = clock(); 
    /* .......  */
    stop = clock();
    time_arm=(double)(stop-start)/(double)CLOCKS_PER_SEC;

    printf("Time Taken by ARM only is %lf \n",time_arm);
}
输出为 仅ARM占用的时间为2055.367296


感谢您的帮助。POSIX要求每秒时钟数为1000000。这意味着您的计数以微秒为单位,而231微秒约为35分钟。您的计时器刚刚溢出,因此发生这种情况时无法获得有意义的结果


为什么您在20分钟时看到问题,我不确定-可能您的
时钟每秒
与POSIX不兼容。无论如何,您的问题是计时器溢出。您需要以另一种方式处理此问题-可能需要仔细研究。

时钟很长,是一个32位有符号值-它可以在溢出前保持2^31。在32位系统上,
CLOCKS\u PER_SEC
值等于
1000000
[如POSIX所述]clock()几乎每72分钟返回一次相同的值

根据也可以返回-1

自进程开始以来已用的挂钟时间(已用 以秒为单位的时间乘以时钟(每秒)如果经过的时间量 不可用时,函数返回–1,转换为时钟

旁注:-


clock()
测量程序使用的CPU时间,它不测量实时时间,
clock()
返回值以微秒为单位指定。

如果您在POSIX系统上,您可以尝试使用
clock\u gettime()
clock\u PROCESS\u CPUTIME\u ID
选项
clock\u gettime()
使用
struct timespec
返回时间信息,因此不会遇到与使用单个整数相同的问题。

注意:
clock()
返回类型
clock\u t
。不要使用
clock()
。几乎在现实世界中的每一个实现中,它都有缺陷,即使没有缺陷,也不会做任何有用的事情。我们正在研究
clock\t
的定义。没有发现任何东西表明它是长的,只有它的“范围和精度……由实现定义”。(C11dr 7.21.1)您是否有一些有用的参考资料来显示它是“长”还是32位?@chux:-我不想打赌它是长的,但我发现通常使用长。至于一个参考,你可以检查一下:-在GNU系统中,时钟t相当于长整数,时钟每秒是一个整数值。如果我错了,你能纠正我吗(@chux:-错了吗?或者我遗漏了什么。如果我遗漏了什么,请发表评论。谢谢!:)复制了那个参考:在GNU时钟中,它是一个
长int
现在我想知道在GNU系统中,它是
长int
32位还是至少32位。嗯,我怀疑是后者。比如说32位或64位。请注意,这是实现中的一个bug。如果结果不可表示,C要求
时钟
失败(返回
(时钟)-1
);不允许包装。有关详细信息,请参见解释。