结构内存分配,内存分配应为4的倍数

问题描述 投票:0回答:2
struct x
{
  char b;
  short s;
  char bb;
};


int main()
{
 printf("%d",sizeof(struct x));
}

输出为:6

我在32位编译器上运行此代码。输出应该是8个字节。

我的解释 - > 1. Char需要1个字节,下一个short需要2的倍数,所以short创建1的填充并占用2个字节,这里已经分配了4个字节。现在唯一的左边的char成员需要1个字节但是因为内存分配是4的倍数所以总内存给出的是8个字节。

c memory struct
2个回答
5
投票

结构的对齐要求是具有最大对齐的成员的对齐要求。这里的最大对齐是short,所以可能是2。因此,两个为b,两个为s,两个为bb给出6。


0
投票

C结构内存布局完全是特定于实现的,您不能假设所有这些。

此外,在C结构的典型对齐中,这样的结构:

struct MyData
{
    short Data1;
    short Data2;
    short Data3;
};

sizeof = 6也是如此,因为如果类型“short”存储在两个字节的存储器中,那么上面描述的数据结构的每个成员将是2字节对齐的。 Data1将位于偏移0,Data2位于偏移2处,Data3位于偏移4.此结构的大小为6个字节。

https://en.wikipedia.org/wiki/Data_structure_alignment

© www.soinside.com 2019 - 2024. All rights reserved.