Вопросы к Поиску с Алисой
Разница между атрибутом attribute((packed)) и прагмой #pragma pack заключается в их назначении и области применения. www.cyberforum.ru stackoverflow.com
Атрибут attribute((packed)) предназначен для упакованных структур и поддерживается только в компиляторе GCC. www.cyberforum.ru Он упаковывает поля в структуру без дыр, обусловленных выравниванием. www.cyberforum.ru Атрибут затрагивает битовые поля, то есть упаковывает их вплотную, без учёта стандартной подложки. www.cyberforum.ru
Прагма #pragma pack изначально является расширением для компилятора Visual C++, но была реализована и в GCC для совместимости с VC++. stackoverflow.com При помощи этой конструкции код получается более переносимым. www.cyberforum.ru Прагма влияет на выравнивание элементов структуры, что может сказаться на выравнивании всей структуры. www.ibm.com
Ещё одно отличие заключается в том, что прагма #pragma pack вступает в силу с точки определения и до следующего #pragma pack, в то время как атрибут attribute((packed)) эффективен только для определения, к которому он присоединён. stackoverflow.com