结构内存分配,内存分配应为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