c++中一个类所占用的空间
看到阿里的一道笔试题:
#include <iostream>#include <iomanip>using namespace std;class A1//c++要求每个实例在内存中都有独一无二的地址,空类也会被实力化,编译器自动添加一个字节{};class A2{int a;char p;};class A21//所有类型都小于处理器的大小,优化为最大类型的整数倍{int a;char b;char c[6];};class A22//单个字符存储,不会优化{char b;char c[5];};class A23//double大于处理器位数,以处理器位数对齐{int a;double b;char c[2];char d[7];};class B//含有虚函数的类中自动维护一个指向虚函数表的指针,大小为4字节{public:B(){}virtual ~B(){}private:int a;char *b;};class C: public B{public:C(){}~C(){}virtual void func();//父类和子类共享一个 vptr,而不管虚函数的个数private:int x;};int main(){cout<<"A1:"<<setw(4)<<sizeof(A1)<<endl;cout<<"A2:"<<setw(4)<<sizeof(A2)<<endl;cout<<"A21:"<<setw(4)<<sizeof(A21)<<endl;cout<<"A22:"<<setw(4)<<sizeof(A22)<<endl;cout<<"A23:"<<setw(4)<<sizeof(A23)<<endl;cout<<"B:"<<setw(4)<<sizeof(B)<<endl;cout<<"C:"<<setw(4)<<sizeof(C)<<endl;return 0;}对于c++关于继承层次的内存布局,准备去看《inside the c++ object module》