有虚函数的类所占内存大小
来源:互联网 发布:企业信息化软件需求 编辑:程序博客网 时间:2024/05/22 00:18
#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(void){cout<<"A="<<sizeof(A)<<endl; //result=1cout<<"B="<<sizeof(B)<<endl; //result=8 cout<<"C="<<sizeof(C)<<endl; //result=8cout<<"D="<<sizeof(D)<<endl; //result=12cout<<"E="<<sizeof(E)<<endl; //result=20getchar();return 0;}
结果:
DEV C++:
VC60:
#include <iostream> using namespace std; class CommonBase{int co;};class Base1: virtual public CommonBase{public:virtual void print1() { }virtual void print2() { }private:int b1;};class Base2: virtual public CommonBase{public:virtual void dump1() { }virtual void dump2() { }private:int b2;};class Derived: public Base1, public Base2//有两个带有虚函数的基类,虚指针所占大小为4*2(是一个vptr还是2个vptr呢????) {public:void print2() { }void dump2() { }private:int d;};int main(){ cout<<sizeof(Base1)<<endl;//12 cout<<sizeof(Base2)<<endl;//12 cout<<sizeof(Derived)<<endl;//24 如果Base1和Base2不是虚继承,则Common Base会补被当做两份不同的拷贝。从而sizeof(Derived)变成28. getchar(); return 0;}
结果:
devc++:
VC60:
#include <iostream> using namespace std; class A{public:virtual void aa() { }virtual void aa2() { }private:char ch[3];};class B: virtual public A{public:virtual void bb() { }virtual void bb2() { }};int main(void){cout<<"A's size is "<<sizeof(A)<<endl;//8cout<<"B's size is "<<sizeof(B)<<endl;//12getchar();return 0;}
VC60:
参考:
C++中虚函数工作原理和(虚)继承类的内存占用大小计算
C++ 虚函数表解析
深入理解C++的动态绑定和静态绑定
C++对象大小讨论
C++对象大小讨论
对比补充例子:
#include<iostream>using namespace std;class B{ public: virtual void fm() {}};class D:public B{ public: virtual void fm() {}};int main(){ cout<<sizeof(B)<<endl; cout<<sizeof(D)<<endl; getchar();}DevC++下:
VC60下:
#include<iostream>using namespace std;class B{ public: virtual void fm() {}};class D:public B{ public: virtual void ft() {}};int main(){ cout<<sizeof(B)<<endl; cout<<sizeof(D)<<endl; getchar();}
DEVC++:
VC60:
#include<iostream>using namespace std;class B{ public: virtual void fm() {}};class D:virtual public B{ public: virtual void fm() {}};int main(){ cout<<sizeof(B)<<endl; cout<<sizeof(D)<<endl; getchar();}DEVC++:
VC60:
#include<iostream>using namespace std;class B{ public: virtual void fm() {}};class D:virtual public B{ public: virtual void ft() {}};int main(){ cout<<sizeof(B)<<endl; cout<<sizeof(D)<<endl; getchar();}DEVC++:
VC60:
- 有虚函数的类所占内存大小
- 类所占内存大小
- 代码分析虚继承类的所占内存大小问题
- 影响类所占内存大小的因素
- C++类的所占内存大小计算)
- C++中对象所占的内存大小
- C++类所占内存大小计算
- C++类所占内存大小计算
- c++空类所占内存大小问题
- C++类所占内存大小计算
- 测试java中类所占内存大小
- C++类所占内存大小计算
- C++类所占内存大小计算
- C++类所占内存大小计算
- YUV所占内存大小
- 变量所占内存大小
- 空类型所占内存大小
- C++中基本的数据类型和所占的内存大小
- 利用vsftpd搭建ftp服务器
- 如何开发ASP.NET MVC异步式(Async)处理应用
- LeetCode: Combination Sum II
- 使用PXE批量部署系统
- 用python做自动化测试--Python实现远程性能监控(1)
- 有虚函数的类所占内存大小
- 未来十年的暴富机会--屌丝离财务自由到底有多远?(三)
- 记录点滴22(过去一年的个人总结)
- POJ-1436 orizontally Visible Segments 线段树
- commit时的块清除
- (转载)Nim游戏博弈(收集完全版)
- net use * /del /y---解决访问共享时提示多重连接的问题
- linux给文件或目录添加apache权限
- 今天开始学IT++,记录一下学习过程和感觉