gpt4 book ai didi

c - 结构填充对齐?

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

typedef struct structc_tag
{
char c;
double d;
int s;
} structc_t;

应用相同的分析,structc_t 需要 sizeof(char) + 7 字节填充 + sizeof(double) + sizeof(int) = 1 + 7 + 8 + 4 = 20 字节,但 sizeof(structc_t) 将是 24 字节。I不明白对齐方式。任何人都可以帮助我吗?

最佳答案

你的结构看起来像这样,如果我们把它全部写出来的话:

typedef struct structc_tag
{
char c;
char pad1[7];
double d;
int s;
char pad2[4];
} structc_t;

pad2 是您不想要的。它发挥作用是因为编译器假定您可能希望将这些东西组成一个数组,在这种情况下每个 d 都必须对齐,所以 sizeof(structc_t) 是 24 .

您可以像这样使用特定于编译器的扩展来启用结构打包:

typedef struct structc_tag
{
char c;
char pad1[7];
double d;
int s;
} __attribute__((packed)) structc_t;

现在需要 pad1(否则 d 将紧跟在您不想要的 c 之后)。并且不再隐式添加 pad2,因此大小现在应为 20。

关于c - 结构填充对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46377456/

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