gpt4 book ai didi

c - 了解 C 中的结构填充

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:04 26 4
gpt4 key购买 nike

我通过数据对齐概念理解 int 和 float 应该存储在可被 4 整除的地址(起始字节地址)。根据它,以下结构的大小为 12

 typedef struct{
char A;
int B;
float C;
}y;

我对上述结构的大小毫无疑问现在我怀疑下面结构的大小

typedef struct {
double A;
char B;
char C;
}x;

x 的大小是 16。我怀疑使用的两个字符可以分配 2 个字节,这样整个结构使用 10 个字节的数据剩下的 2 个字节在声明时可以用来分配给另一个 short int 吗?

但是编译器使用了 16 个字节的数据并填充了其他 6 个单元格。我不明白为什么它会浪费另外 6 个单元格,如果它在声明它们时可以将它们用于另一个变量?。谁能帮助我理解上述概念?(我假设 int 、float 和 double 的大小分别为 4、4、8 字节。)

最佳答案

x 的情况下,它包含一个 double,(在您的情况下)大小为 8。这意味着整个结构需要是一个倍数该大小以便正确对齐 x 的数组。

由于数组是连续分配的,因此数组的每个成员都紧跟在内存中的前一个之后。如果 x 的大小为 10,则对于数组,第二个元素的 A 成员将位于偏移量 10 处。为了正确对齐,每个数组成员需要从以下的倍数开始最大元素的大小。因此该结构在末尾包含填充以实现此目的。

关于c - 了解 C 中的结构填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51289389/

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