平台特定与未定义的PHP行为?

时间:2019-04-01 01:32:58

标签: php undefined-behavior platform-specific

我只是被filesize()函数的platform-specific behaviour所咬住,返回了大于2GB的文件的负数。

此行为是“特定于平台”还是“未定义”?

背景

PHP用C编写。在C中,无符号整数溢出定义了行为,而有符号整数溢出没有定义行为。有符号的整数溢出会导致“未定义的行为”,从而使抽象执行机处于undefined state中。

我认为,实际上,大多数常见的硬件都使用二进制补码存储带符号的整数,而带符号的整数溢出只是“环绕”,产生了大多数人期望的行为。例如-2147483649 - 1 == 0

从理论上讲,任何有符号整数溢出的C程序(包括PHP引擎)都处于未定义状态,其中int x = 1之类的简单操作可以完全按预期运行,或者等效于rm -rf /通话。

0 个答案:

没有答案