C++中的类所占内存空间总结

目录

一、结论先行

二、复杂场景举例


注意是类不是类对象。

一、结论先行

取自优秀博客,建议详细看看:

C++中的类所占内存空间总结 - fengMisaka - 博客园 (cnblogs.com)

空的类是会占用内存空间的,而且大小是 1,原因是 C++ 要求每个实例在内存中都有独一无二的地址。

(一)类内部的成员变量:

  • 普通的变量:是要占用内存的,但是要注意对齐原则(这点和 struct 类型很相似)。
  • static 修饰的静态变量:不占用内容,原因是编译器将其放在全局变量区。

(二)类内部的成员函数:

  • 普通函数:不占用内存。
  • 虚函数:有一个指向虚函数表的指针,要占用 4 个字节,用来指定存虚函数地址的虚拟函数表的入口地址。所以一个类的虚函数所占用的地址是不变的,和虚函数的个数是没有关系的。

(三)虚继承与继承的区别:

  • 多了一个虚基指针。
  • 虚基类位于派生类存储空间的最末尾。
  • 不会共用虚函数表指针。

二、复杂场景举例

比较复杂的场景,一个类B虚继承了一个虚基类A,A有1个char成员变量和1个虚函数,B还有自己的100个虚函数和1个char变量。那这种情况占多少内存。

这样计算:

对于A,1(char) + 3(内存对齐) + 4(虚函数表指针) = 8

对于B,8(A) + 1(char) + 3(内存对齐) + 4(自己的虚函数表指针) + 4(指向虚基类的指针) = 20

100个虚函数和1个虚函数一样,都是一个虚函数表去存地址,然后虚函数表指针去指向虚函数表。虚函数指针在类的最开始。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值