Мы знаем, что _attribute__((__packed__))
означает (скорее всего) «не вставлять отступы, чтобы ускорить работу», а также может означать «не вставлять никаких выравниваний, чтобы сохранить выравнивание».
struct structure2
{
int id1 __attribute__((__packed__));
char name __attribute__((__packed__));
int id2 __attribute__((__packed__));
char c __attribute__((__packed__));
float percentage __attribute__((__packed__));
};
struct structure2 b;
printf(" \n\nsize of structure2 in bytes : %d\n", sizeof(b));// output = 20
Почему не удаляются все отступы (выход = 14)?
struct
, а не отдельные поля (которые уже упакованы, поскольку они являются скалярными типами). - person too honest for this site   schedule 04.01.2016