本文讨论的范围是x86架构。
例如,我们有一个如下所示的结构体:
struct X{
int a;
char b;
// compiler will pad 3 bytes here
double c;
};
X x;
我认为x
的对齐应该是它的最大成员,即在这种情况下是double
,它占用8字节,所以&x
应该是8的倍数,我对吗?
然而,在一些测试之后,我的编译器(msvc 2013)说&x
也可以是4的倍数,但不是8。
这是否意味着&x.c
也将是4的倍数?
我在哪里误解了?
double
对齐到四个字节,而不是八个字节。 - Stuart Olsen