Некоторые типы данных должны быть выровнены по определенной границе.Так, например:
struct V
{
char a;
double b;
char c;
double d;
};
sizeof (char) равен 1, а sizeof (double) равен 8, но размер этой структуры может быть больше ожидаемого 18, если ему нужно, чтобы удваивались для выравнивания с 8-граница байта.В этом случае и поскольку члены должны появляться в памяти в порядке, в котором они объявлены в структуре, может быть 7 байт «заполнения» рядом с членом c, и, возможно, некоторые с элементом a тоже.
Опасность здесь возникает, когда упаковка нестандартна, поэтому размер этой структуры может варьироваться, и вы отправляете ее в «двоичном» формате по проводам или сохраняете в файле, где она будет читаться в другом месте (даже если endian-единство двойников одинаково).
В качестве альтернативы предложениям по удалению предупреждения с помощью прагм, вы можете решить разобраться с ним в коде, изменив порядок своих членов.Поместите те, которые нуждаются в наибольшем выравнивании сначала, а более низкие позже.Поэтому сначала ставьте указатели и двойники, затем целые, затем шорты и любые символы-члены последними.