この質問は、メンバーが4バイトに整列していることを確認する方法に関連しています。
例:
struct Aligned
{
char c;
__attribute__((__aligned__(4))) int32_t member;
}
struct Test
{
char c;
Aligned s;//is s.member 4 bytes aligned?
}
void f1()
{
char c1;
Aligned s;//is s.member 4 bytes aligned?
char c2;
}
void f2()
{
Aligned* s = new Aligned();//is s.member 4 bytes aligned?
}
「メンバー」がすべての場合に4バイト整列されているかどうか、およびそうである場合はこれがどのように機能するかを説明できますか?
編集:Alignedが他の構造体から派生している場合を忘れました:
struct Aligned : public SomeVariableSizeStruct
{
char c;
__attribute__((__aligned__(4))) int32_t member;
}
2番目の編集:私の質問は次のとおりです。構造体の最初のメンバーは常に4バイト整列されていますか?ここに示されているすべての場合において、最初の変数アドレスは4バイトに整列されていない可能性があり、3バイトのパディングは、「メンバー」が4バイトに整列されていることを保証しません。