struct x
{
char b;
short s;
char bb;
};
int main()
{
printf("%d",sizeof(struct x));
}产出为:6
我在32位编译器上运行这段代码。输出应该是8个字节。
我的解释是-> 1. Char需要1字节,下一个短的需要2的倍数,所以短创建一个填充1,占用2个字节,这里已经分配了4个字节。现在,唯一的左char成员占用1字节,但是由于内存分配是4的倍数,所以总的内存分配是8字节。
发布于 2018-09-06 18:53:55
结构的对准要求是对齐度最大的构件。这里的最大对齐是针对short的,所以很可能是2。因此,两个用于b,两个用于s,两个用于bb提供6。
发布于 2018-09-06 19:22:16
C结构内存布局完全是特定于实现的,您不能假设所有这些。
此外,在C的典型对齐中,结构是这样的:
struct MyData
{
short Data1;
short Data2;
short Data3;
};如果类型"short“存储在两个字节的内存中,那么上面描述的数据结构的每个成员都是对齐的。Data1的偏移量为0,Data2为偏移量2,Data3为偏移量4,此结构的大小为6个字节。
请参阅alignment
https://stackoverflow.com/questions/52210482
复制相似问题