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

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个字节。

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

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

此外,在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