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个虚函数一样,都是一个虚函数表去存地址,然后虚函数表指针去指向虚函数表。虚函数指针在类的最开始。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站栏目:C++中的类所占内存空间总结-创新互联
网站网址:http://ybzwz.com/article/ddopjd.html