这个问题与如何确保成员是 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;
}
第二次编辑:我的问题是:结构的第一个成员总是4字节对齐吗?因为在这里介绍的所有情况下,第一个变量地址可能不是 4 字节对齐的,并且 3 字节填充不能保证“成员”是 4 字节对齐的