关于字节对齐的问题,请高手指点
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.