GCC C语言 结构体大小问题
发布网友
发布时间:2024-04-17 06:10
我来回答
共2个回答
热心网友
时间:2024-04-18 21:00
题主的问题很经典,这个是结构体对齐的问题,看得出题主学习很仔细。
MSG中的AcountMoney的偏移量是4。
此种结构体包含结构体的问题,首先将结构体展开(参考:http://www.cnblogs.com/motadou/archive/2009/01/17/1558438.html)。
struct MSG {
long TypeMsg;
int AccountID;
char AccountName[20];
char AccountPass[10];
double AccountMoney;
};
因而偏移量就是AccountID的偏移咯,就是4啦。
然后Msg的占得大小也容易求出来了,如下:
4B + 4B + 20B + 10B + 2B + 8B = 48B。我来解释下为何要加2B,因为double占得内存为8B,然后,他的开始i的偏移必须为自身的整数倍,加2B为40B,因而加2B。
希望帮到了题主,题主确实学习很细致,祝题主进步。
建议题主多看看博客,很多博客写得很好的。
热心网友
时间:2024-04-18 20:59
TypeMsg占了4个,
AccountID占了4个;
AccountName占了20个;
AccountPass占了10个,这里一共38个
然后下一个是double,对齐到8字节边界于是变成从40开始,40+8 -> 48