C++类内存分布
1.空类为了占位,空间上占1个字节。
2.静态成员变量不占内存,在数据段。(初始化数据段)
3.静态成员函数不占内存。
4.非静态成员变量占内存。(存储按照内存对齐原则)
5.非静态成员函数不占内存。
6.虚函数,分三种情况:
(1)非继承的类:
1个虚指针(指向虚函数表),32位机占4字节,64位机器占8字节。
(2)单继承的类:
1个虚指针(指向虚函数表),
虚函数表 = 复制父类的虚函数表 [更新重写的虚函数,没有更新的虚函数直接复制] + 新的虚函数。
32位机占4字节,64位机器占8字节。
(3)多继承的类:
一个主虚指针:
指向复制主基类的虚函数表(更新重写的虚函数,没有更新的虚函数直接复制)+ 新的虚函数。
32位机占4字节,64位机器占8字节。
多个从虚指针:
指向复制其它基类的虚函数表(更新重写的虚函数,没有更新的虚函数直接复制)。
32位机占4字节,64位机器占8字节。
class X {};
class Y : public virtual X {};
class Z : public virutal X {};
class A : public Y, public Z {};
cout << sizeof(X) << endl;
cout << sizeof(Y) << endl;
cout << sizeof(Z) << endl;
cout << sizeof(A) << endl;
执行结果:
1
8
8
16