虚继承类内存大小计算
2016-04-29 21:48
411 查看
参考文档:http://blog.csdn.net/hackbuteer1/article/details/7883531
计算公式基于64-bit os,指针大小为8
问题一:含有虚函数类继承的类大小计算
问题二:含有虚基类和虚函数的计算
问题三:单虚继承
计算公式基于64-bit os,指针大小为8
问题一:含有虚函数类继承的类大小计算
#include<iostream> using namespace std; class A {}; class B { char ch; virtual void func0(){} }; class C { char ch1; char ch2; virtual void func(){} virtual void func1(){} }; class D:public A,public C { int d; virtual void func(){} virtual void func1(){} }; class E:public B,public C { int e; virtual void func0(){} virtual void func1(){} }; int main() { cout<<"A="<<sizeof(A)<<endl; // 空类大小为1 cout<<"B="<<sizeof(B)<<endl; // 虚函数占用一个虚函数类表指针位置 大小为8 数据对齐 输出16 cout<<"C="<<sizeof(C)<<endl; // 两个虚函数占用一个虚函数类表指针位置 大小为8 数据对齐 输出16 cout<<"D="<<sizeof(D)<<endl; // 两个基类占用一个虚函数类表指针位置 大小为8 int占内存4 数据对齐 输出16 cout<<"E="<<sizeof(E)<<endl; // 两个基类占用两个虚函数类表指针位置 大小为16 int占内存4 char 2 数据对齐 输出24 return 0; }
问题二:含有虚基类和虚函数的计算
#include<iostream> using namespace std; class A { int a; }; class B: virtual public A { private: int b; public: virtual void func1(){} virtual void func2(){} }; class C:virtual public A { private: int b2; public: virtual void func3(){} virtual void func4(){} }; class D:public B,public C { private: int d; public: virtual void func1(){} virtual void func3(){} }; int main() { cout<<"A="<<sizeof(A)<<endl; // 大小为int大小4 cout<<"B="<<sizeof(B)<<endl; // 虚函数占用一个虚函数类表指针位置 大小为8 两个int 8 输出16 cout<<"C="<<sizeof(C)<<endl; // 虚函数占用一个虚函数类表指针位置 大小为8 两个int 8 输出16 cout<<"D="<<sizeof(D)<<endl; // 两个基类占用两个虚函数类表指针位置 大小为16 一个虚基类表 大小为8 int占内存16 数据对齐 输出40 return 0; }
问题三:单虚继承
#include<iostream> using namespace std; class A { public: virtual void func1(){} virtual void func2(){} private: char ch[3]; }; class B: virtual public A { public: virtual void func3(){} virtual void func4(){} }; int main() { cout<<"A="<<sizeof(A)<<endl; // 大小为int大小4 cout<<"B="<<sizeof(B)<<endl; // 单继承有一个虚函数类表指针位置 大小为8 三个char 3 输出16 return 0; }
相关文章推荐
- RocEDU.阅读.写作《苏菲的世界》书摘
- webpack loader
- 我的Android进阶之旅------>RxJava学习资料汇总
- Application和Session对象
- 关键代码段(临界区)实现线程死锁
- 获取浏览器名称和版本号
- Java Runnable and Thread
- iOS开发中 实现登录时关于使用QQ做为第三方授权登录的问题
- POJ 2001:Shortest Prefixes
- Android wifi解析
- 第九周周赛——周赛兼组队赛第一场题解(出自HDU5443,本oj,HDU 5667,poj1742,codeforces 664A,BUNOJ 28199)
- jdbc:mysql中文出现?解决方案
- set multiset c++ stl
- spring PROPAGATION
- 线段树
- iOS开发总结之 NSString和NSMutableString
- 文章标题
- 二叉排序树
- 策略模式
- Corosync+Pacemaker+DRBD+Mysql高可用HA配置