繁体   English   中英

时间()系统调用。 溢出的返回值

[英]times() syscall. Overflowed return value

如果可能的clock_t(又名有符号长)范围溢出,将返回哪个值?

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

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

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

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

由于我还不能发表评论,我希望这个答案有一些用处..根据这个人的说法

times() 返回自过去任意点以来经过的时钟滴答数。 返回值可能会溢出clock_t 类型的可能范围。 出错时,返回 (clock_t) -1,并适当设置 errno。

所以它可以溢出,是的,当它溢出时,它会从+2,147,483,647变为-2,147,483,647,如果返回是unsigned long并继续向正方向滴答。 然而,溢出后有符号整数是未定义的,这是由于编译器对它们的优化处理方式不同, 这里

如果我的假设是正确的,它可能会溢出多次,这意味着如果unsigned溢出后您的值可能无效,或者如果signed值将是 undefined (随机)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM