c++计算一个类的sizeof()

sizeof()返回为字节数。一般与所用的编译器和机器(64位或者32位)有关。
一个空的类sizeof()返回1。因为一个空类也要实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof()为1。sizeof()一个函数对象(functor)一般为1(functor一般是一个只含有函数的类,理论大小为0,实际为1)。若果一个子类继承一个大小为0的父类,则在子类中其父类大小就为0,不再是1
类内的普通成员函数不参与sizeof()的统计。析构函数,跟构造函数这些成员函数,是跟sizeof无关的,也不难理解因为我们的sizeof是针对实例,而普通成员函数,是针对类体的,一个类的成员函数,多个实例也共用相同的函数指针,所以自然不能归为实例的大小。
一个类如果含有虚函数,则这个类中有一个指向虚函数表的指针,占4个字节。
静态成员:不影响类的大小。静态数据成员被编译器放在程序的一个global data segment中,它是类的一个数据成员.但是它不影响类的大小。
普通继承:就是基类的大小,加上派生类自身成员的大小。
虚拟继承:当存在虚拟继承时,派生类中会有一个指向虚基类表的指针。所以其大小应为普通继承的大小,再加上虚基类表的指针大小(4字节)。

对于大多数CPU来说,CPU字长的整数倍操作起来更快,因此对于这些成员加起来不够这个整数倍,有可能编译器会插入多余的内容凑足这个整数倍(一般是4或者8的整数倍);
32位的电脑通常对齐到4字节。
在这里插入图片描述
在这里插入图片描述