我下面的代码打印24,但大小应该是:
1+7(垫)+8+4=20?
`
typedef struct data3
{
char cval;
double dval;
int val;
} structc_t;
//somewhere
printf("%d",sizeof(data3));
最佳答案
1 + 7 (pad) + 8 + 4 + 4 (pad) = 24
。您忘记了尾部填充,它是用来确保struct data3
元素在数组中正确对齐的。整个结构必须在8字节边界上对齐,这意味着它的大小应该可以被8整除。
C语言保证数组的以下关系
sizeof(T[N]) == sizeof(T) * N
这就意味着数组不能在元素之间添加自己的填充。如果需要任何元素间填充来正确对齐数组中的元素,则该填充应包含在单个数组元素中。没办法。
因此,即使您从未在数组中使用过
sizeof(struct data3)
,struct data3
也将包含特定于数组的填充。这就是你在结构中看到的尾部填充。(如果您从未在数组中使用过
struct data3
,全局优化编译器可能会优化它。但这通常是不值得的。)关于c - 为什么此结构的大小为24?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30686792/