sizeof使用

假设有如下代码:

输出结果为:

1 4 1 4 8 12 1 4 8 8 1 8 8 12

解析:

A为空类,空类所占空间为1

B里面带有一个int元素,int占空间4

C里面没有数据成员,相当于空类,占空间1

D有虚函数,虚函数涉及到虚表(虚指针),因此占空间4(注意,此处假设还有其他虚函数,但是只要没有数据成员,所占空间还是4)

E里面除了虚函数还有一个int成员,因此占空间8

F中除了虚函数跟int成员外还有一个char*指针,但是不管是什么指针,其所占空间都为4,因此总共为12

G单一继承空类A,因此其所占空间还是1(注意,即使是多重继承空类,则其所占空间还是1)

H虚继承A,因为涉及到虚表,因此其所占空间为4

I虚继承B,因为涉及到虚表,并且B中本来有一个int变量,因此所占空间为8

J虚继承A,B,因为涉及到虚表,并且B中本来有一个int变量,因此所占空间为8(不因为两个虚继承而为12)

K中有一个静态变量,因为静态变量是存放在全局数据区的,而sizeof计算栈中分配的大小,是不会计算静态变量的,因此其所占空间为1

L,M,N涉及到内存中数据对齐的问题无论是先int后两个char或者先两个char再来一个int,其所占空间为8,而一个char,一个int,一个char所占空间为12(此时为了对齐,每个char占空间4)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值