C++中sizeof小结

首先,sizeof是一个操作符。
其作用是返回一个对象或类型所占的内存字节数。
其返回值为 size_t,依赖于编译系统的值,一般定义为 typedef unsigned int size_t。
32位机下:
# include <iostream>
using namespace std;
//空类大小
class Empty{};
class Son : public::Empty{};

//静态成员函数和静态成员
class Sfun {
public:
	static int a;
	int b;
};

//虚函数
class Fun {
public:
	virtual void fun() {};
};
class MoreFun {
public:
	virtual void fun1() {};
};
class BestFun :virtual public::Fun, virtual public::MoreFun {
public:
	virtual int B() {};
};

//普通继承
class A {
public:
	char a0;
	int a1;
};
class B :public::A {
public:
	int b0;
};

int main() {
	//空类大小
	cout << "空类和空类的大小:" << endl;
	cout << sizeof(Empty) << endl;
	cout << sizeof(Son) << endl;

	//静态成员函数和静态成员
	cout << "静态成员大小:" << endl;
	cout << sizeof(Sfun) << endl;

	//虚函数
	cout << "虚函数大小:" << endl;
	cout << sizeof(Fun) << endl;
	//多个虚函数
	cout << "多个虚函数大小:" << endl;
	cout << sizeof(MoreFun) << endl;
	//虚函数继承
	cout << "虚函数继承大小:" << endl;
	cout << sizeof(BestFun) << endl;

	//普通继承
	cout << "普通继承:" << endl;
	cout << sizeof(B) << endl;//12  5+1+4 ----内存对齐12 

	cin.get();
	return 0;
}

在这里插入图片描述
总结:

  • 空类的大小为1字节
  • 一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间。
  • 对于包含虚函数的类,不管有多少个虚函数,只有一个虚指针,vptr的大小。
  • 普通继承,派生类继承了所有基类的函数与成员,要按照字节对齐来计算大小
  • 虚函数继承,不管是单继承还是多继承,都是继承了基类的vptr。(32位操作系统4字节,64位操作系统 8字节)!
  • 虚继承,继承基类的vptr。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值