dstBuffer, при этом структура имеет
__attribute__ ((packed))
GCC выдает ошибку, что нельзя привязать упакованное поле, почему?
потому что может сломаться алигмент?
тогда зачем packed
Чтобы делать memcpy из файлового буфера в структуру, точно зная, что не будет выстрела в голову из-за пробелов
packed не решает никаких проблем только добавляет. Он не решает проблем межархитектурной совместимости, он не решает проблем с выравниванием, эндианностью и т.п. И добавляет проблем с адресацией элементов структуры, которые теперь по ссылке/указателю нельзя адресовать (но случайно можно и чем дальше кончится -- неизвестно).
Почему нельзя по указателю адресовать?
потому что указатель получается невыровненный
логичный вроде бы вопрос: ну и что такого?
такой указатель даже формировать UB
Потому, что для типа T* компилятор имеет право генерировать код который учитывает, что T всегда в памяти выравнен. И будет его через векторные инструкции читать и т.п.
Б/у?
Обсуждают сегодня