C++ Object Size

 

 

The answer is:

size of A1 is = 1
size of B1 is = 1
size of B2 is = 1
size of B3 is = 4
size of C1 is = 8
size of A2 is = 4
size of B4 is = 4
size of B5 is = 8
size of B6 is = 4
size of B7 is = 4
size of C2 is = 8
size of C3 is = 8
size of C4 is = 12
size of C5 is = 4
size of C6 is = 4
size of D1 is = 8

 

1. 一个空类对象的大小(A1的size)不是0,而是1
这是这个字节是被编译器安插进去的一个字节,这样就使得这个空类的两个实例得以在内存中配置独一无二的地址。

2. 包含有virtual function的类的对象size至少是4字节(VPTR)

3. 对齐方式
复合数据类型里占用字节最多的元素与CPU对齐字节数中较小的一个,例子就是C1有int和char,size是8(两个int的大小)

4. 虚继承本质是有一个virtual base class table. 这个table一般是和virtual function table合并在一起的。
所以对于Class B6来说是以下的布局。

B6
----       A2 object's address [-1]
_vptr -->  type info           [0]
----       ~B6()'s address     [1]


所以B6和B4一样大。

5. 多重继承中,多个vtpr table, 子类的table与其中的一个virtual function table 合并,

所以D1的size是8,其中table _vtpr_C5是D1和C5共享的。
布局如下。

------         A2s object address [-1]
_vtpr_C5----  type info  [0]
               ~C's address [1]
------
               A2s object address [-1]
_vtpr_C6 ----  type info [0]
               ~C address [1]
------

Thanks for the detail description from Sunny.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值