gpt4 book ai didi

c - sizeof(struct) 不遵循填充

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

考虑一下,

#include<stdio.h>

struct outside1
{
int a;
char b;
char c;
char d[3];
};

struct outside2
{
char a,b,A[2];
char B[2];
};

int main()
{
printf("%zu %zu\n",sizeof(struct outside1),sizeof(struct outside2));
return 0;
}

通过使用填充概念预测输出,它将是“12 8”。但实际输出是“12 6”。

使用 gcc 4.7.2 Debian

谁能解释一下?

-新手

最佳答案

charint 几乎在任何实现中都有其自身大小的对齐要求。

sizeof(char) 每个标准为 1,int 的常见大小为 1、2 和 4。

这导致 outside1 的常见大小为 6、8、12。
对于 outside2 of 6.

顺便说一句:编译器被允许在每个结构成员之后插入任意数量的填充,尽管它通常使用最小必要量来解决对齐限制,以便轻松遵循“公共(public)初始子序列”规则。

此外,由于 C99 或相关版本的对齐方式仅限于 2 的幂,并且对象大小必须能被它整除。

关于c - sizeof(struct) 不遵循填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972924/

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