关于字节对齐的问题,请高手指点

KingKing555 2008-03-22 05:45:32
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字节吗?应该有两个虚函数指针阿


...全文
118 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
medie2005 2008-03-22
  • 打赏
  • 举报
回复
这样的问题最好到C\C++区去问。
medie2005 2008-03-22
  • 打赏
  • 举报
回复
静态变量由所有对象共享,自然不能在每个对象中都存在。
KingKing555 2008-03-22
  • 打赏
  • 举报
回复
我还以为虚函数表直接编译在class a中了,呵呵
static int i也只是声明而已,所以不占内存是吗?

谢谢搂主了
medie2005 2008-03-22
  • 打赏
  • 举报
回复
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.

33,009

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧