C++对象内存分布

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值