https://github.com/llvm/llvm-project/issues/53861 ?
у меня язык чешется что-нибудь брякнуть про [нарушение] strict aliasing, и про то, что компилятор оптимизирует UB, но я не могу что-то с уверенностью утверждать
В плюсах и си разная модель памяти. Кажется в си просто нет понятия strict aliasing'а, поэтому такие вопросы в плюсовой группе, имхо, только собьют с толку.
Вот как раз в C есть strict aliasing прям формально, в плюсах похожее понятие иначе называется https://en.cppreference.com/w/c/language/object
в с++ об этом здесь: http://eel.is/c++draft/basic.lval#11
https://godbolt.org/z/YG83xW9j3
Это естественно не так
Модель памяти отличается. На счет алиасинга я не прав, но я никогда не претендовал на знание си. Именно поэтому обсуждение в чате по си должно быть продуктивнее.
Могу ошибаться, но проблема видимо в uint8_t* который char* и который подчиняется особым правилам. Давно не изучал эту тему по Си, но в C++ есть такие фишки, что в ряде случаев мешает компилятору генерировать более оптимальный код. Изначальный код очень похож на -O1
uint8_t это скорее всё-таки unsigned char
не переживай. если там заменить всё на инты, то проблема остаётся
Обсуждают сегодня