Платформо-зависимое и неопределенное поведение PHP? - PullRequest
0 голосов
/ 01 апреля 2019

Меня только что укусила функция *1002* для платформы , возвращающая отрицательное число для файла> 2 ГБ.

Является ли это поведение "платформо-зависимым" или "неопределенным"?

ФОН

PHP написан на C. В C целочисленные переполнения без знака имеют определенное поведение, а целочисленные переполнения со знаком - нет. Целочисленные переполнения со знаком вызывают «неопределенное поведение», из-за чего абстрактная машина выполнения остается в неопределенном состоянии .

Я полагаю, что на практике большинство аппаратных средств хранят целые числа со знаком с использованием дополнения до двух, а переполнение со знаком целого числа просто "оборачивает" вокруг себя, создавая поведение, которого ожидает большинство людей. Например, -2147483649 - 1 == 0.

Теоретически, любая C-программа (включая механизм PHP), в которой целочисленные переполнения со знаком находятся в неопределенном состоянии, в котором простая операция, такая как int x = 1, может работать точно так же, как ожидалось, или может быть эквивалентна rm -rf / звоните.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...