1.非静态成员变量总合。
2.编译器为了CPU计算,作出的数据对齐处理。(可用#pragma pack(n)来设定变量的对齐方式)
3.为了支持虚函数,产生的额外负担。
//例子:
#pragma pack(2)
class BU
{
int number; //4
union UBffer
{
char buffer[13];
int number;
}ubuf; //13+1
void foo(){} //0
typedef char*(*f)(void*); //0
enum{hdd,ssd,blueray}disk; //4
}bu;
//sizeof(bu)的值为22。
重点:
空类在C语言中占0字节,在C++中占1字节。
sizeof(void):编译错误或者为1。sizeof(void*):指针大小。