#include<c++/4.8.2/iostream>
using namespace std;
class A
{
int a;
};//sizeof(A) 4
class B //静态数据
{
int a;
static int b;
};//4,静态成员存储在静态区,不影响类的大小。
class C //虚函数
{
virtual void func();
virtual void fun();
// int a;
};//8 有虚函数时,会有一个指向虚函数表的指针vptr,视系统位数而定,64位系统下为8,
//而虚函数的个数则不影响此指针的大小。
class D //普通成员函数
{
void fun1();
void fun2();
};//1 类的大小与其构造函数、析构函数以及其他成员函数无关。
class E //内存对齐
{
int a;
char b;
};// 8 内存对齐
class F:public E //普通继承
{
int b;
};// 12 普通继承是基类数据成员+本身数据成员大小
class G:virtual public E //虚继承
{
int b;
};// 24 派生类自身成员大小4 +基类数据成员大小8+ 虚拟指针大小8 +内存对齐
// 继承多个虚基类,也只有一个指针vptr
class H //空类
{
};// 1 空类为1,编译器的实例化,每个实例在内存中都是独一无二的,所以空类就隐含一个字节
int main()
{
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
cout<<sizeof(D)<<endl;
cout<<sizeof(E)<<endl;
cout<<sizeof(F)<<endl;
cout<<sizeof(G)<<endl;
cout<<sizeof(G)<<endl;
return 0;
}
c++中类的大小计算
最新推荐文章于 2024-03-03 17:16:46 发布