我下面的代码打印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/

10-13 08:49