C++对象内存分布

本文深入探讨了C++类的内存布局,包括无虚函数类、有虚函数类、多继承类等不同情况下的内存分配规则。通过解析类成员的顺序、内存对齐策略以及虚函数表的影响,为开发者提供了一套全面理解C++类内存布局的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,没有父类,没有虚函数。完全和结构体内存分布相同,顺序按照各个成员的声明顺序,需要考虑内存对齐(PS:不同编译器的对齐策略部相同,所以一个dll中声明的对象在外面未必可用,因为类成员访问本质是按照偏移量访问,不同内存对齐方式会导致偏移量不同,解决方法是所有dll产生的对象的访问都应该交由dll导出的函数处理)。空间大小为各个成员的大小之和。

2,没有父类,有虚函数。第一个成员为虚表地址,下面的内存分布和1相同。空间大小为各个成员大小之和加4。

3,一个父类,父类有虚函数。顺序依次是虚表地址,父类成员,类成员。空间大小为父类大小加上类成员大小。

4,一个父类,父类没有虚函数,类有虚函数。顺序依次是虚表,父类成员,类成员。空间大小为父类大小之和加上类成员大小加上4。

5,一个父类,父类没有虚函数,类没有虚函数。顺序依次是父类成员,类成员。空间大小为父类大小加上类成员大小。

6,多个父类,存在父类有虚函数。顺序依次是虚表地址,父类1成员(父类1本身有虚函数),有虚函数的父类,没有虚函数的父类,类成员。父类的分布规则是由虚函数的父类在前面,没有虚函数的父类在后面,同等类比父类(有虚函数和没有虚函数)安装声明顺序分布。空间大小为各个父类大小加上类成员大小。

7,多个父类,父类都没有虚函数,类有虚函数。顺序依次是虚表地址,各个父类成员(按照声明顺序),类成员。空间大小为各个父类大小之和加上类成员大小加上4。

8,多个父类,父类都没有虚函数,类没有有虚函数。顺序依次是各个父类成员(按照声明顺序),类成员。空间大小为各个父类大小之和加上类成员大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值