C++中类的成员函数,静态成员是不占类的大小的。类的大小 = 基类的大小 + 子类所有non-static成员变量的大小 + 非虚基类大小 + vptr(虚函数表)大小(可能还不止一个),这里成员变量是会被字节对齐的。
1、空类的大小为1字节
2、字节对齐的问题
如下例:
一个类的大小可以被下面的方式改变:
class
{
bool
int
bool
};
这个结果可能会让你吃惊,因为A的成员总数是6个字节:1+4+1个字节。那另6字节是哪儿来的?编译器在每个bool成员后面都插入了3个填充字节以保证每个成员都是按4字节排列,以便分界。你可以减少A的大小,通过以下方式:
class
{
bool
bool
int
};
这一次,编译器只在成员c后插入了2个字节。因为b占了4个字节,所以就很自然地把它当作一个字的形式排列,而a和c的大小1+1=2,再加上2个字节就刚好按两个字的形式排列B。
3、虚函数:如果有虚函数,类的大小+4个字节。(用来存放vptr)
例:
class
{
};
class
{
}
4、虚基类指针:如果是虚继承,则子类的大小为:虚基类的大小 + 4个字节(用来存放指向虚基对象的指针)+子类新增成员的大小。
例:
class A
{
};
class C: virtual public A
{
};sizeof(C)
5.静态成员变量不占用类的空间,它存储在静态区域。
6.类的成员函数地址存储在代码区域,所以不占字节。(虚函数除外,+4)