C++-C中结构体对齐问题
为什么在GCC上 sizeof(a) = 16,而 sizeof(b) = 24?
struct{
char a;
short b;
int p;
long long c;
}a;
struct{
char a;
short b;
long long c;
int p;
}b;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
默认的内存是8字节对齐,然后你看第一个
char 占1字节
short占2字节
int占4字节
加起来7字节挤在一起没问题。
然后是那个long long,这时候如果直接把long long 放出来,那就会跨过一个8字节,所以安排一段新的放,那就是8 + 8 = 16字节。
然后你看第二个
char 占1字节
short 占2字节
加起来一共3字节,下面那个8字节的long long如果放在这里,显然就会跨过一个8字节区域,所以要跳过,这样第一个8字节放了char 和 short,第二个刚好放了long long,最后剩下一个8字节区域把int丢进去了,剩下4字节也不能用了。那就是8 + 8 + 8 = 24字节。