
全部展开
这是内存对齐的问题. 每个变量都有两个对齐参数: 默认对齐参数和系统定义的对齐参数. 实际的对齐参数是两者中较小的一个. 例如,在上面的结构中,c的默认对齐参数为2(short类型占用的内存量),而系统定义的对齐参数为4,因此变量c的实际对齐参数为2

以下规则适用于结构内存对齐:
1. 该结构的第一个成员变量的起始地址与该结构的地址一致;

2. 结构成员变量的起始地址相对于结构地址的偏移量必须是成员变量的对齐参数的整数倍;
3. 结构的对齐参数是其内部成员变量对齐参数中最大的;

4. 结构的大小必须是结构的对齐参数的整数倍;
根据上述规则,假设结构地址为0x1000,分析您给出的结构

成员变量a的对齐参数为MIN(sizeof(int),4)= 4,起始地址为0x1000,与结构地址相同;
成员变量b的对齐参数为MIN(sizeof(int),4)= 4sizeof计算结构体大小,起始地址为0x1004,与结构地址的偏移量为0x1004-0x1000 = 0x04,它是4的倍数<
成员变量c的对齐参数为MIN(sizeof(short),4)= 2,起始地址为0x1008,与结构地址的偏移量为0x08,是2的倍数.
成员变量d的对齐参数为MIN(sizeof(char),4)= 1,起始地址为0x100A,与结构地址的偏移量为0x0A,是1的倍数.
结构本身的对齐参数为MAX(a,b,csizeof计算结构体大小,d)= 4,因此结构的大小必须为4的倍数,并且结构本身的4个成员变量占据4 + 4 + 2 + 1 = 11,为了满足4的倍数,成员变量d之后将有一个字节填充字节.
总而言之,答案是12.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-157717-1.html
真心很好听
我们会一直陪你的