我有以下结构。其中尺寸是在侧面计算的。填充后结构的大小应为 30Bytes。但大小是 28 。 28的结构尺寸如何?
#include <stdio.h>
struct a
{
char t; //1 byte+7 padding byte Total = 8bytes
double d; //8 bytes Total = 16bytes
short s; //2 bytes Total = 18Bytes
char arr[12];//12 bytes 8+8+4+12=32. Total = 30Bytes
};
int main(void)
{
printf("%d",sizeof(struct a)); // O/p = 28bytes
return 0;
}
最佳答案
您可以使用 offsetof
来了解每个结构成员之后的实际填充:
#include <stddef.h>
printf("Padding after t: %zu\n",
offsetof(struct a, d) - sizeof (((struct a *) 0)->t));
printf("Padding after d: %zu\n",
offsetof(struct a, s) - offsetof(struct a, d)
- sizeof (((struct a *) 0)->d));
printf("Padding after s: %zu\n",
offsetof(struct a, arr) - offsetof(struct a, s)
- sizeof (((struct a *) 0)->s));
printf("Padding after arr: %zu\n",
sizeof(struct a) - offsetof(struct a, arr)
- sizeof (((struct a *) 0)->arr));
正如
R.
所写,您可能在 32-bit
系统上,其中 double
的对齐是 4 个字节而不是 8 个字节。关于c - 带填充结构的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13016404/