LINUX.ORG.RU

История изменений

Исправление hateyoufeel, (текущая версия) :

Там прикол в том, что даже уже при -O1 компилятор не делает отдельного итерирования j и вычисления j * 0x20000001, а преобразует сначала код в

Да-да. Вопрос в том, нахера он это делает-то. Потому что на производительность это не то чтобы сильно влияет. Как и написано в PDF по ссылке, оптимизации вокруг UB в основном достаточно бесполезны.

Если написать хотя бы0x20000001L, то значение long укладывается в допустимые рамки, и цикл остаётся.

И вот поэтому большая часть сишных и плюсовых проектов собираются с -fwrapv. Потому что это UB проще выключить чем пытаться не отстрелить себе случайно член.

Исправление hateyoufeel, :

Там прикол в том, что даже уже при -O1 компилятор не делает отдельного итерирования j и вычисления j * 0x20000001, а преобразует сначала код в

Да-да. Вопрос в том, нахера он это делает-то. Потому что на производительность это не то чтобы сильно влияет.

Если написать хотя бы0x20000001L, то значение long укладывается в допустимые рамки, и цикл остаётся.

И вот поэтому большая часть сишных и плюсовых проектов собираются с -fwrapv. Потому что это UB проще выключить чем пытаться не отстрелить себе случайно член.

Исходная версия hateyoufeel, :

Если написать хотя бы0x20000001L, то значение long укладывается в допустимые рамки, и цикл остаётся.

И вот поэтому большая часть сишных и плюсовых проектов собираются с -fwrapv. Потому что это UB проще выключить чем пытаться не отстрелить себе случайно член.