c - times() 系统调用。返回值溢出

标签 c linux

如果可能的clock_t(又名signed long)范围溢出,将返回哪个值?

假设我使用内核 2.6 版本,arch 是 x86(32 位)。 sizeof(signed long) = 4 字节。 最大值 = 2147483647。

根据手册页 - here ,系统调用 times() 返回自过去任意点以来已经过的时钟滴答数。

“注释”部分中提到以下内容:“在 Linux 上,测量 times() 返回值的“过去的任意点”在不同的内核版本中有所不同。从 Linux 2.6 开始,该点为 (2^32/HZ) - 系统启动时间前 300 秒”

所以,我不明白十进制表示中的什么值将是起点(假设 HZ = 100)。以及溢出后的返回值是多少。

最佳答案

由于我还无法发表评论,我希望这个答案有一定用处..根据此 man

times() returns the number of clock ticks that have elapsed since an arbitrary point in the past. The return value may overflow the possible range of type clock_t. On error, (clock_t) -1 is returned, and errno is set appropriately.

所以它可以溢出,是的,当它溢出时,如果返回的是一个unsigned long,它会从+2,147,483,647−2,147,483,647 并继续向正方向变动。然而,有符号整数在溢出后未定义,这是由于编译器以不同方式处理它们以进行优化,here .

如果我的假设是正确的,它可能会多次溢出,这意味着如果无符号,则溢出后您的值可能无效,或者该值将是未定义的(随机)如果签名

关于c - times() 系统调用。返回值溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54537081/

相关文章:

c++ - 为什么在平台A编译的静态库不能在没有警告的情况下在平台B上使用?

c - 如何将 char[] 十六进制字符数组转换为字节值数组?

c - TCP_KEEPIDLE 应该低于 TCP_KEEPINTVL 吗?

ruby-on-rails - 将 Rails 应用程序推送到 Heroku 时出错

linux - Jar 命令排除任何文件夹中的隐藏文件

c - C 中的 HTTP GET 服务器,长时间等待 (TTFB)

c - insmod:错误:无法插入模块 kprobe_example.ko:不允许操作

C 预处理器 : #define in C. .. 建议

linux - 带有 args 的 bash 别名适用于一种环境,不适用于另一种环境

linux - "In-source builds are not allowed"在 cmake