Разница между packed и aligned атрибутами при работе с C заключается в том, что они указывают компилятору, как управлять памятью для структур. 1
packed атрибут указывает, что переменная или поле структуры занимают самый малый возможный объём памяти. 2 В результате члены размещаются рядом друг с другом без заполнения. 1 Это особенно полезно при работе со структурами данных, определёнными оборудованием, где нужно поддерживать точный макет памяти. 1
aligned атрибут определяет минимальное выравнивание для структуры. 13 Например, aligned(4) означает, что компилятор обеспечит, что адрес памяти структуры будет кратным 4. 1 Это может привести к добавлению заполнения для удовлетворения требований выравнивания. 1
Таким образом, packed атрибут используется для минимизации заполнения между членами структуры, а aligned — для указания границы выравнивания, что может приводить к добавлению заполнения для удовлетворения ограничений выравнивания памяти. 1