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

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字节吗?应该有两个虚函数指针阿


...全文
93 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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.
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-22 05:45
社区公告
暂无公告