АЛИАСИНГ В C++: КОГДА ПАМЯТЬ ИГРАЕТ В ПЕРЕОДЕВАНИЯ
Компилятор смотрит на код и такой: «А это точно один и тот же кусок памяти? Или ты сейчас мне подсовываешь новый персонаж под старым паспортом?»
Вот тут и начинается aliasing — штука, из-за которой можно получить не баг, а классический C++-аттракцион: всё собрано, всё красиво, а потом undefined behavior тихо выносит продакшн через чёрный ход. ⚠️
История у проблемы старая: язык рос, костыли множились, комитет пытался «договориться с физикой», но физика, как обычно, не подписала ни один пропозал. В других языках с этим либо строже, либо проще, а в C++ — как в плохом retention: вроде клиент ещё жив, но уже ничего не обещает.
Что это значит для нас, смертных:
- один и тот же блок памяти нельзя трактовать как попало;
- оптимизатор не обязан угадывать твои намерения;
- «ну у меня же работает» — не аргумент, а будущий инцидент.
И да, надежды на очередные предложения стандарта тоже были. Как обычно: обещали закрыть дыру, а на выходе получили ещё один слой правил, который нужно помнить, иначе сам себя же и переиграешь.
Gamble Blackbook
@GambleBlackbookPro
АЛИАСИНГ В C++: КОГДА ПАМЯТЬ ИГРАЕТ В ПЕРЕОДЕВАНИЯ
Этот пост опубликован в Telegram-канале Gamble Blackbook. Подписаться можно по ссылке: @GambleBlackbookPro.