首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于字节对齐的有关问题,请

2012-03-05 
关于字节对齐的问题,请高手指点struct A{short ashort bshort c}sizeof(A)为什么等于6? 不是要字节对

关于字节对齐的问题,请高手指点
struct A{
  short a;
  short b;
  short c;
};

sizeof(A)为什么等于6? 不是要字节对齐吗?

还有这题考虑到C++类的内存布局的问题:
class a 
{
  public:
  virtual void funa();
  virtual void funb();
  void func();
  static void fund();
  static int i;
  private:
  int j;
  char ch;
};


sizeof(a) 为什么等于12 ???? 其中的两个虚函数不应该占有8字节吗?应该有两个虚函数指针阿




[解决办法]
1、
结构体的对齐一般是按结构体中占空间最大的类型为来对齐的。
在你的例子中,最大占空间最大的类型为short,于是,不需要对齐。
sizeof(A)直接是2+2+2=6。

2、class a中含一个虚函数表指针,虚函数表指针指向class a的虚函数表,class a的虚函数表中含有两个函数指针,分别指向virtual void funa()和virtual void funb()。
因此,class a的内存布局是:
1):虚函数表指针,占4字节
2):私有数据成员int j,占4字节
3):私有数据成员char ch,占1字节

由1的对齐规则(在c++中,struct和class其实是等同的),知道,class a按4字节对齐。
于是,sizeof(a)=4+4+1+3=12.

热点排行