Data语意学

考虑如下代码:

class X{};
class Y : public virtual X{};
class Z : public virtual X{};
class A : public Y, public Z{};

cout << sizeof(X) << sizeof(Z) << sizeof(Y) << sizeof(A) ;

结果为:1 8 8 16;
class X{};并不是空的,它有一个隐藏的1byte大小,那是被编译器安插进去的一个char

对于YZ; 这个大小和机器有关,也和编译器有关系,事实上收到如下几个因素影响

  1. 语言本身所造成的额外负担
  2. 编译器对于特殊情况所提供的优化处理
  3. Alignment的限制 class Y和Z的大小截至目前为5bytes.在大部分机器上,聚合的结构体大小会受到alignment的限制,使它们能够更有效的在内存中被读取,在我们机器上,alignment,是8bytes,所以classY和Z必须填补3bytes。

alignment就是將数值调整某数的整数,在64位的计算机上通常aligement为8bytes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值