用测试程序分析类的内存布局1
2011-10-17 22:22
316 查看
下面用程序测试与类的内存布局相关的东西。
看仔细看下面程序,建议自己动手运行:
#include<iostream>
using namespacestd;
class A{
};
class B{
public:
void shw(){}
};
class C{
public:
virtual void show(){}
};
class D:publicC{
public:
virtual void show1(){}
virtual void show2(){}
};
class E{
public:
virtual void show1(){}
virtual void show2(){}
};
void main() {
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
cout<<sizeof(D)<<endl;
cout<<sizeof(E)<<endl;
A a;
cout<<sizeof(a)<<endl;
C c1,c2;
D d1;
printf("%p\n",c1.show);//输出成员函数的入口地址
printf("%p\n",c2.show);
printf("%p\n",d1.show);
}
以下是在我的电脑上的运行结果:
分析以上的输出结果可以得出:
l 声明无成员变量的类,仅占用一个字节的内存空间;
l 含有虚函数而无成员变量的类仅占用四个字节空间,这四个字节空间存储的是虚函数表的入口地址
l 类的成员函数(不管虚实函数)在内存中只有一份,继承也是一样的,不会产生函数的副本;
l 对于虚函数,类要保存虚函数表的入口地址。对于继承来得虚函数只是在继承类的虚函数表中保存父类中该函数的地址(这点可以从最后两个输出说明);
看仔细看下面程序,建议自己动手运行:
#include<iostream>
using namespacestd;
class A{
};
class B{
public:
void shw(){}
};
class C{
public:
virtual void show(){}
};
class D:publicC{
public:
virtual void show1(){}
virtual void show2(){}
};
class E{
public:
virtual void show1(){}
virtual void show2(){}
};
void main() {
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
cout<<sizeof(D)<<endl;
cout<<sizeof(E)<<endl;
A a;
cout<<sizeof(a)<<endl;
C c1,c2;
D d1;
printf("%p\n",c1.show);//输出成员函数的入口地址
printf("%p\n",c2.show);
printf("%p\n",d1.show);
}
以下是在我的电脑上的运行结果:
分析以上的输出结果可以得出:
l 声明无成员变量的类,仅占用一个字节的内存空间;
l 含有虚函数而无成员变量的类仅占用四个字节空间,这四个字节空间存储的是虚函数表的入口地址
l 类的成员函数(不管虚实函数)在内存中只有一份,继承也是一样的,不会产生函数的副本;
l 对于虚函数,类要保存虚函数表的入口地址。对于继承来得虚函数只是在继承类的虚函数表中保存父类中该函数的地址(这点可以从最后两个输出说明);
相关文章推荐
- 用测试程序分析类的内存布局2
- 一个Linux C进程内存布局的验证程序的分析
- NET程序内存分析工具CLRProfiler的使用(性能测试)
- 内存测试Stream程序分析
- 程序测试C程序内存空间布局
- .NET程序内存分析工具CLRProfiler的使用(性能测试)
- .NET程序内存分析工具CLRProfiler的使用(性能测试)
- .NET程序内存分析工具CLRProfiler的使用(性能测试)
- C程序的内存空间布局
- Linux下用JMap对Java程序进行性能测试检查内存泄露问题
- C程序的内存布局(Memory Layout)
- Java程序内存分析Java VisualVM(Visual GC)
- C++程序运行时内存布局之----------局部变量,全局变量,静态变量,函数代码,new出来的变量
- php4.0.0远程溢出源代码分析与测试程序
- Java程序内存分析:使用mat工具分析内存占用
- 三星6410摄像头测试程序流程分析
- Java程序的单元测试-分析并获取测试用例
- 程序更新后tomcat内存持续增长原因分析
- JVM——深入分析对象的内存布局
- 一次由于内存问题程序被kill的测试 (3)