【问题标题】:clock function between standard library and POSIX标准库和 POSIX 之间的时钟函数
【发布时间】:2013-09-11 20:46:53
【问题描述】:

在 POSIX 2008 中 clock 函数定义的一部分:

clock() 返回的值可能会在某些实现中回绕。

还有

CLOCKS_PER_SEC 在<time.h> 中定义为一百万。

在 C 标准中clock 函数有重要说明:

为了测量程序花费的时间,应该在程序开始时调用时钟函数,并从后续调用返回的值中减去它的返回值。

还有

CLOCKS_PER_SEC:扩展为clock_t 类型的表达式(如下所述),即时钟函数返回值的每秒数。

在 POSIX 中,他们说 POSIX 标准中的信息与 c 标准一致,但是在 c 标准中 CLOCKS_PER_SEC 是实现定义的,与具有值的 POSIX 不同,在 c 标准中不应发生包装 - 从示例中得到用于计算应用程序运行时间 - 但在 POSIX 中,他们表示每 36 分钟会发生一次包装。

当我使用 c 编译器时 - 例如 Gcc、Clang 甚至 I.C.L。 - 在 Linux 中,clock 返回值是否会换行或不知道 POSIX 和 c 标准使用相同的标头 time.h

注意:除了Linux,任何平台都可以使用,我在这里举个例子。

谢谢

【问题讨论】:

  • 为什么这被否决了?

标签: c posix standard-library


【解决方案1】:

这是 POSIX 中的一个错误。已报告,已解决,并将在下一个版本中修复。见:http://austingroupbugs.net/view.php?id=686

我怀疑修复所有有缺陷的实现需要更长的时间。

【讨论】:

    【解决方案2】:

    POSIX 要求与 C 标准一致,但比 C 标准中的要求更严格。

    C 标准要求 CLOCKS_PER_SEC 由编译器定义。 POSIX 也是如此,但它说它必须有一个特定的值。

    C 标准并没有真正说明环绕 - 没有直接声明它可以环绕,但也没有禁止说它不能。给定一个有限的大小,它最终还是不可避免地会环绕。

    【讨论】:

    • 好吧,如果 CLOCKS_PER_SEC 在某些实现中被定义为 1,那么 clock 将不会环绕。但是在示例中,他们说在程序开始和结束时调用时钟然后减去,如果有机会回绕,考虑到他们给出的示例,您不认为他们应该提到它吗?
    • @Muhammadalaa:如果它是 1,它当然可以换行(尽管承认,它需要足够长的时间,大多数人不会运行足够长的时间才能看到它)。至于他们是否应该提到环绕:在教程中,是的。在一个标准 - 不是那么多。标准中的示例应阐明标准的要求,但不一定要解释该功能的所有一般用途。
    猜你喜欢
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多