类内存布局 + 虚函数表

sizeof(C)的数值是()

1
2
3
4
5
6
7
8
9
10
class C
{
public:
char a;
static char b;
void *p;
static int *c;
virtual void func1();
virtual void func2();
};

类的内存布局:

  • 类中static修饰的变量不占用类大小,因为修饰后存储在静态区域。

  • sizeof是用来计算栈大小,不涉及全局区,故类的静态成员大小sizeof不涉及。

    对于new或malloc开辟的区域,sizeof计算的也只能是其指针的大小,无法得到开辟的内存大小!

  • 类与结构一样,都有字节对齐的问题。

  • 含有虚函数的类中,类起始地址会放置一个指向虚函数表的指针,也占类的内存。

  • 类中的枚举也不会占用内存。