Яндекс Сигнал
Яндекс Сигнал
@YandexSignalPro

Я регулярно вижу одну и ту же ошибку у команд: лезут в C++-оптимизации, не понимая, где у них уже сломан алиас

Я регулярно вижу одну и ту же ошибку у команд: лезут в C++-оптимизации, не понимая, где у них уже сломан алиасинг. А потом удивляются, почему код «вроде правильный», а на -O2 начинает вести себя как хочет.

Коротко по сути:
1. Алиасинг в C++ — это не абстракция, а правила, по которым компилятор решает, можно ли считать два указателя на одну и ту же память независимыми.
2. Нарушил правило — получил undefined behavior. Не баг компилятора, а ваш баг.
3. История здесь показательная: язык долго жил с очень жесткими ограничениями, а комитет пытался закрыть дыру точечными предложениями.
4. На практике проблема упирается не в «теорию», а в проверяемость: код проходит ревью, тесты молчат, а потом ломается на другой версии компилятора или флагах сборки.
5. В будущем обещают сделать модель понятнее, но пока реальный вывод простой: если у вас низкоуровневый C++, алиасинг надо проверять так же жестко, как границы массива.

Я бы ставил это в один ряд с самыми опасными классами UB. Не потому что «страшно», а потому что слишком часто его не видно до продакшена ⚠️
Этот пост опубликован в Telegram-канале Яндекс Сигнал. Подписаться можно по ссылке: @YandexSignalPro.
tech

Свежие посты в категории «Tech Infrastructure»

Все каналы категории →

start

Готовы запустить рекламу через сеть public.tg?

Новый оффер, продукт, GEO, кейс, событие или партнёрский запуск — соберём маршрут под задачу и отдадим медиаплан.

Telegram для медиаплана: @AFFtop_connect. Быстрый тест: $20 за канал, $1000 за пакет по сети.