深度探索c++对象模型-01-空类的大小、成员函数、成员变量的大小

一、空类大小

class A
{

};

void main()
{
	A a;
	cout <<"sizeof(a):"<< sizeof(a) << endl;
	
	system("pause");
}

结果:
在这里插入图片描述
从结果可以看出,空类的大小是1,这是为了空类可以被实例化,并且每个实例在内存中都有独一无二的地址,因此,编译器会给空类隐含加上一个字节,这样空类实例化之后就会拥有独一无二的内存地址。如果没有这一个字节的占位,那么空类就无所谓实例化了,因为实例化的过程就是在内存中分配一块地址。

注意:当该空白类作为基类时,该类的大小就优化为0了,这就是所谓的空白基类最优化。
注意:空白基类最优化无法被施加于多重继承上只适合单一继承。

class A
{

};

class B :public A
{

};

void main()
{
	A a;
	cout <<"sizeof(a):"<< sizeof(a) << endl;

	B b;
	cout << "sizeof(b):" << sizeof(b) << endl;
	
	system("pause");
}

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

二、成员函数对类大小的影响

class A
{
public:
	void go()
	{

	}
	void go1()
	{

	}
	void go2()
	{
	}
};



void main()
{
	A a;
	cout <<"sizeof(a):"<< sizeof(a) << endl;

	
	system("pause");
}

结果:
在这里插入图片描述
从结果可以看出,成员函数不占用类对象的空间

三、成员非静态变量对类对象空间大小的影响

class A
{
public:
	void go()
	{

	}
	void go1()
	{

	}
	void go2()
	{
	}

	int ax;
};



void main()
{
	A a;
	cout <<"sizeof(a):"<< sizeof(a) << endl;
	
	a.ax = 100;
	system("pause");
}

结果:
在这里插入图片描述
从结果可以看出非静态变量占用空间。
在这里插入图片描述

四、静态变量对类对象大小的影响

class A
{
public:
	void go()
	{

	}
	void go1()
	{

	}
	void go2()
	{
	}

	static int x;
	
};
int A::x = 1;


void main()
{
	A a;
	cout << sizeof(a) << endl;
	system("pause");
}

结果:
在这里插入图片描述
从结果可看出,静态成员变量部占用类对象的空间。

五、虚函数对类对象大小的影响

class A
{
public:
	void go()
	{

	}
	void go1()
	{

	}
	void go2()
	{
	}

	
	virtual void go3()
	{

	}
	
};



void main()
{
	A a;
	cout << sizeof(a) << endl;
	system("pause");
}

结果:
在这里插入图片描述
从结果可以看出加入了虚函数会增加四个字节,其实这四个字节就是指向虚函数表的指针(VPTR)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发如雪-ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值