C++对象大小,你真的知道吗?

我们都直到char大小为1,int为4,那么C++中对象的大小是多少呢?

看三个问题:

  1. C++中函数占不占对象的大小
  2. 空类的大小是多少?
  3. 如果类中有虚函数,类的大小是多少?

一,C++中函数占不占对象的大小

看一段代码:

可以看出,类的大小即为类的属性a的大小为4,函数并不占对象的大小。

那么这个的原因是什么呢?

原因:

这样定义的好处就是为了节省空间的大小。

假设此时类中有10个函数,类又定义了100个对象。如果每个对象都包含一个函数的大小,那么就需要占用1000个函数空间的位置,这样极大的消耗了资源。

实际上类的函数是放在代码区的,哪个对象需要调用函数,则从代码区调用,因为函数并不是对象独有属性,所以并不冲突,这样仅仅占10个函数空间位置就够了。

这样一对比,函数放在代码区节省了很多的资源,因此函数并不占用对象的大小。

至于对象放的位置,如果new的就在堆区,不然就在栈区。

二,空类的大小是多少?

看代码:

我们会发现,空类的大小变成了1,正常不应该是0吗?

这样设置的原因是因为每一个对象实例化都需要空间,这里系统默认给了一个占位符,占1字节大小

三,如果类中有虚函数,类的大小是多少?

看图片:

对比上面两种情况,空类大小为1,但是函数又不占用空间,为什么函数变为虚函数却变成了4呢?

因为当有虚函数时,编译器会给这个类加上虚函数指针 vptr(32位是4,64位是8)

此时类中有了指针,因此对象的大小就变为了4。

上面就是类中不同情况的大小。

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大学生毕设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值