本篇文章于 823 天前发表,某些内容可能已经过时,请注意甄别。

类内存布局 + 虚函数表

sizeof(C)的数值是()

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 计算的也只能是其指针的大小,无法得到开辟的内存大小!

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

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

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