关于以下类a的定义,请判断sizeof(a) 的结果
class a{
public:
virtual void funa(); ---->虚拟方法表指针占 4 个字节
virtual void funb();
virtual void func();
void fun();
static void fun();
static int si; ----->并未计入sizeof()
private:
int i;
char c;
};
答案: 12
说明:
关于类占用的内存空间,有以下几点要注意:
1.如果类中含有虚方法,则编译器需要为类构建虚拟方法表,类中需要有一个指针指向这个虚拟方法表的地址。在32位的系统中,它占用 4 个字节。
2.类中的静态成员是被类所有的实例所共享的,它不计入sizeof 计算的空间。
3.类成员采用字节对齐的方式分配空间。
本题中虚拟方法表指针占 4 个字节,i 成员占 4 个字节 ,c成员占 1 个字节。 但是由于字节对齐,c成员当前" 索引位置" 是9 不是 4 的整数倍,需要额外再分配 3 个字节空间,因此 sizeof(a) 的结果为 12.