В C++ есть классический баг, который убивает не код, а P&L команды: алиасинг памяти.
Снаружи всё выглядит нормально — компилятор, оптимизации, быстрый бинарь. А внутри он может решить, что два указателя не пересекаются, и перестроить логику так, что вы получаете undefined behavior вместо ожидаемого результата.
Что важно:
— aliasing rules в C++ исторически очень жёсткие
— нарушение этих правил часто не падает сразу, а стреляет в проде через недели
— попытки “починить потом” обычно упираются в ABI, оптимизации и старый код
— комитет уже не первый год крутит тему, но простого универсального решения нет
Я слышал, что именно такие вещи чаще всего ломают не junior-код, а “боевые” системы после очередного апдейта компилятора. 😐
Для тех, кто живёт на performance:
1) проверяйте места с raw pointers и кастами
2) не верьте, что “у меня всегда работало”
3) любые микрооптимизации без понимания aliasing могут стоить дороже, чем экономят
Если у вас в продукте есть C++-ядро, это не теоретическая тема. Это вопрос: вы ускоряете систему или закладываете мину под релиз.
Traffic Money
@TrafficMoneyPro
В C++ есть классический баг, который убивает не код, а P&L команды: алиасинг памяти.
Этот пост опубликован в Telegram-канале Traffic Money. Подписаться можно по ссылке: @TrafficMoneyPro.