gpt4 book ai didi

c - 结构填充的规则是什么

转载 作者:行者123 更新时间:2023-11-30 14:39:57 25 4
gpt4 key购买 nike

我浏览了 geeksforgeeks 中的一篇关于结构填充的帖子,https://www.geeksforgeeks.org/is-sizeof-for-a-struct-equal-to-the-sum-of-sizeof-of-each-member/但我不知道为什么在这种情况下:

int main() 
{

struct C {
// sizeof(double) = 8
double z;

// sizeof(short int) = 2
short int y;
// Padding of 2 bytes

// sizeof(int) = 4
int x;
};

printf("Size of struct: %d", sizeof(struct C));

return 0;
}

我知道 y(短整型)后面跟着 x(整型),因此 y 之后需要填充。但为什么这里的padding是2呢?

最佳答案

编译器希望在四字节边界上对齐 int,但它比该边界少了两个字节,因此填充计算为两个字节:

struct C { 
// offset = 0
double z;
// offset = 8
short int y;
// offset = 10
// ... padding ...
// offset = 12
int x;
// offset = 16
};

下一个大于 10 的四的倍数是 12。

编辑:实际上,结构是按照此算法(伪代码)对齐的:

offset = 0;
alignment = 1;
for each field in structure {
offset = (offset + field.alignment - 1) / field.alignment * field.alignment;
field.offset = offset;
alignment = lcm(alignment, field.alignment);
}
structure.alignment = alignment;
structure.size = (offset + alignment - 1) / alignment * alignment;

关于c - 结构填充的规则是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55804546/

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