+ -
当前位置:首页 → 问答吧 → C++ 字节对齐问题,编译器是默认4字节,在线等

C++ 字节对齐问题,编译器是默认4字节,在线等

时间:2011-12-08

来源:互联网

编译器是字节对齐是4字节;
struct A
{
 
  char b;

  int a;

  short c;
}

struct B
{
  short a;
  short b;
  short c;
}

sizeof(A)为12,可以理解,char占一个,后部3个空,int占4个,short 占两个 然后根据结构体园整再补两个,那么是12个了;


sizeof(B)为6个这个,不大理解,3个short每个占两个,按照结构体园整最后不是还要补两个吗?不是应该是8吗;
又尝试了下面结构体;
struct C
{
  char a;
  char b;
  char c;
}
sizeof(C)为3,难道结构体内是同类型的不用补整吗,还是什么其他情况,求大牛指点?

作者: zjxylc   发布时间: 2011-12-08

求指点

作者: zjxylc   发布时间: 2011-12-08

结构体成员类型相同就按原来类型占用的字节数计算不用补齐,如果类型不同的话按最大的不齐。按字节补齐分为按1个字节,2个字节,4个字节,8个字节补齐,这个在vc6里面是可以设置的。

作者: liru125504   发布时间: 2011-12-08

1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
2. 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;
3. 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。

作者: wwmfeng   发布时间: 2011-12-08

结构体跟类一样 需要“;”

作者: wowo55mimi   发布时间: 2011-12-08