C++ снова напоминает: память — не ваша, если компилятор решил иначе. Алиасинг тут не про «два указателя на одно место», а про то, что стандарт жёстко ограничивает, какие типы вообще могут смотреть на один и тот же байт.
Что это значит на практике:
1) Компилятор имеет право считать, что разные типы не пересекаются.
2) Из-за этого он агрессивно переставляет чтения/записи и ускоряет код.
3) Если вы нарушили правила — привет, undefined behavior: баг может жить годами и вылезти только на релизной сборке.
Почему это важно не только для C++-фанатов:
— оптимизации в компиляторах всё умнее, и цена «неаккуратного» кода растёт;
— старые трюки с приведением типов через указатели могут ломаться на новых версиях clang/gcc;
— комитет пытается смягчить боль, но без убийства производительности.
Перевод на язык продакшена: если код полагается на «ну оно же работает», компилятор однажды докажет обратное. ⚙️
Ad Briefs
@AdBriefsHub
C++ снова напоминает: память — не ваша, если компилятор решил иначе. Алиасинг тут не про «два указателя на одн
Этот пост опубликован в Telegram-канале Ad Briefs. Подписаться можно по ссылке: @AdBriefsHub.