gpt4 book ai didi

C 结构填充。嵌套结构

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:52 25 4
gpt4 key购买 nike

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_twoy_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com