类的大小与成员变量(非static)和虚函数指针有关,还要考虑4字节对齐
struct A{//32位编译器
A() {}
~A() {}
int m1;
int m2;
};
struct B:A{
B() {}
~B() {}
int m1;
char m2;
static char m3;
};
struct C{
C() {}
virtual~C() {}
int m1;
short m2;
};
sizeof(A)->int占4字节,sizeof(A)=8
sizeof(B)->在A的基础上增加m1(4字节),m2(2字节),8+4+2=14,考虑四字节对齐,sizeof(B)=16
sizeof(C)->虚函数指针4字节,4+4+2=10,对齐sizeof(C)=12
空类占1个字节
另:
32位编译器:
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器:
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
这篇博客介绍的很详细