struct Y{
int int_one;
int int_two;
void * pointer;
}
struct X{
char char_one;
char char_two;
struct Y y_structures[20];
}
填充在 32 位和 64 位机器上是不同的。我不知道为什么。
据我所知,填充应该如下:
0x0 char_one <br>
0x1 char_two <br>
0x4 y_structures[0].int_one <br>
0x8 y_structures[0].int_two <br>
0x12 y_structure[0].pointer <br>
32 位的结构与上面提到的类似,但在 64 位机器上,char_two
和 y_structures[0].int_one
的地址之间的差异是 7 个字节。我认为它应该是 3 个字节,因为在 char_two
之后要对齐的类型是 y_structures[0]
的一个 int 并且它的大小在两种架构上都是 4。请帮忙
最佳答案
问题不在于 int,而在于指针。指针在 64 位机器上的大小为 8 字节,因此它们必须从内存地址 mod 8 开始。
0x0 char_one
0x1 char_two
0x8 y_structures[0].int_one
0x12 y_structures[0].int_two
0x16 y_structure[0].pointer
0x24 y_structures[1].int_one
0x28 y_structures[1].int_two
0x32 y_structure[1].pointer
...
所以必须有6个填充字节。这在 32 位机器上没有必要,因为指针只有 4 个字节。
关于C 结构填充。嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25378140/