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++中的类所占内存空间总结-创新互联
文章URL:http://scyanting.com/article/ddopjd.html