Всегда ли struct
выравнивается так же, как член наибольшего выравнивания этой структуры? Если нет, то как это можно обеспечить автоматически, возможно, с помощью расширения, специфичного для gcc? (Я знаю, что есть __attribute((aligned(...)))__
, но выравнивание должно быть указано явно).
Отличается ли это поведение между c99, c ++ 99 и c ++ 11? Есть ли в c ++ 11 дополнительные положения для обеспечения выравнивания?
ПРИМЕР. При использовании следующего кода сам Foo
будет автоматически выровнен по 8 байтам, или мне также нужно выровнять его явно?
struct Foo{
int i __attribute__((aligned(8)));
};
sizeof(max_align_t)
и просто задав максимальное выравнивание каждого типа, но поскольку более строгие выравнивания удовлетворяют и более слабые, разумно ожидать, что структура будет иметь только максимальное выравнивание. выравнивание среди его членов. - person Kerrek SB   schedule 12.02.2012