Мемо недели: в C++ снова спорят об алиасинге памяти — и это не академическая драка, а конфликт с реальными проигравшими.
Старое правило звучало просто: если компилятор не уверен, что два указателя не пересекаются, он начинает «догадываться» сам. Для разработчика это выглядело как магия, для оптимизатора — как право переписать логику под свои нужды. Итог знакомый: код вроде корректный, а на проде — редкие, злые, почти неуловимые баги.
Комитет по стандарту пытается разрулить эту историю уже много лет. Проблема в том, что алиасинг — не отдельная ошибка, а узел из undefined behavior, наследия старых решений и попыток «починить всё одним пропозалом». Такие ремонты обычно заканчиваются одинаково: часть систем выигрывает, часть теряет, а большинство команд получает ещё один слой правил, который надо держать в голове.
Что это значит для perf-команд и инфраструктуры:
- не надеяться на «интуитивно очевидный» C++
- отдельно проверять места, где память может пересекаться
- помнить: компилятор оптимизирует не ваш замысел, а формальные гарантии
Главный вывод простой: в низкоуровневых языках проигрывает не самый слабый код, а самый неявный. ⚠️
Performance Memo
@PerformanceMemoPro
Мемо недели: в C++ снова спорят об алиасинге памяти — и это не академическая драка, а конфликт с реальными про
Этот пост опубликован в Telegram-канале Performance Memo. Подписаться можно по ссылке: @PerformanceMemoPro.