#include <stdio.h>
int main()
{
struct {
int a : 1; // bit field sized 1
double b;
}structVar;
//structVar.a = 10;
printf("%d",sizeof(structVar));
}
在 linux 机器上的 gcc 编译器中,structVar 的大小是 16。 根据我的说法,对于 double 位域应该是 9. 8,对于 int 位域应该是 1。
知道为什么吗?
最佳答案
结构对齐(并填充)到其最大成员的大小 - 在这种情况下,对齐到 sizeof(double)
。这是预期的(虽然不是标准要求的)并且是可预测的。第二个成员是 int、short 还是其他什么都没有关系,只要它小于 double,sizeof struct 就会是 16。
结构包装可以减小结构的大小。例如。 gcc 允许 #pragma pack(n)
为后续结构设置新的对齐方式,因此对齐方式 4 将为 12 字节。
原因是,如果你有这个结构的数组,第二个结构将是未对齐的。它可能会影响某些 CPU 的性能甚至出现故障。
关于c - 结构大小问题,要求不需要的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23953246/