为什么大型乘法不会导致php中的缓冲区溢出

时间:2014-05-27 15:50:39

标签: php buffer-overflow

在一段代码中,我看到一个函数,它基本上以参数表示一个数字,表示一个时间,然后将其乘以得到它的值,以秒为单位。

在我看来,在这种情况下可能会发生缓冲区溢出;如果我输入的数字足够大,则乘以它会导致缓冲区溢出。然而,在烦扰之后,试图输入越来越大的数字,我无法生产它。

我的问题是,在这种情况下PHP是做什么来防止缓冲区溢出?

我认为它可能与php中的内存分配限制有关,但我也继续将其增加到接近无穷大,但仍然没有缓冲区溢出。

1 个答案:

答案 0 :(得分:2)

请参阅参考integer overflow的文档中的示例:

  

如果PHP遇到超出整数类型边界的数字,那么   将被解释为浮点数。另外,一个操作   超出整数类型边界的数字将返回   而是浮动。

如果你var_dump输出了你的返回值,你可能会注意到它已被强制转换为浮点数而不是整数(假设你实际上已经到达导致整数溢出的结果)。

整数的最大大小也取决于平台 - 32位计算机上整数的最大大小为2147483647,但在64位计算机上则为9223372036854775807

<强>更新

关于浮点类型的文档:

  

浮点数的大小取决于平台,但最大值为   ~1.8e308具有大约14个十进制数字的精度是常见的   值(64位IEEE格式)。

那是1.8 x 10 ^ 308,或18后跟307零(比number of atoms in the observable universe多了很多)