c++对象内存分布.docx

c++对象内存分布.docx

ID:59256665

大小:178.94 KB

页数:18页

时间:2020-09-08

c++对象内存分布.docx_第1页
c++对象内存分布.docx_第2页
c++对象内存分布.docx_第3页
c++对象内存分布.docx_第4页
c++对象内存分布.docx_第5页
资源描述:

《c++对象内存分布.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、对象的影响因素 简而言之,我们一个类可能会有如下的影响因素: 1)成员变量2)虚函数(产生虚函数表)3)单一继承(只继承于一个类)4)多重继承(继承多个类)5)重复继承(继承的多个父类中其父类有相同的超类)6)虚拟继承(使用virtual方式继承,为了保证继承后父类的内存布局只会存在一份)上述的东西通常是C++这门语言在语义方面对对象内部的影响因素,当然,还会有编译器的影响(比如优化),还有字节对齐的影响。在这里我们都不讨论,我们只讨论C++语言上的影响。 本篇文章着重讨论下述几个情况下的C++对象的内存布局情况。 1)单一的一般继承(带成员变量、虚

2、函数、虚函数覆盖)2)单一的虚拟继承(带成员变量、虚函数、虚函数覆盖)3)多重继承(带成员变量、虚函数、虚函数覆盖)4)重复多重继承(带成员变量、虚函数、虚函数覆盖)5)钻石型的虚拟多重继承(带成员变量、虚函数、虚函数覆盖) 我们的目标就是,让事情越来越复杂。 知识复习 我们简单地复习一下,我们可以通过对象的地址来取得虚函数表的地址,如:           typedef void(*Fun)(void);            Baseb;            FunpFun=NULL;            cout<< "虚函数表地址:" 

3、<<(int*)(&b)<

4、主要使用如下编译器和系统:1)WindowsXP 和 VC++20032)Cygwin 和 G++3.4.4 单一的一般继承 下面,我们假设有如下所示的一个继承关系:  请注意,在这个继承关系中,父类,子类,孙子类都有自己的一个成员变量。而了类覆盖了父类的f()方法,孙子类覆盖了子类的g_child()及其超类的f()。 我们的源程序如下所示: class Parent{public:    int iparent;   Parent():iparent(10){}    virtual void f(){cout<< " Parent::f()" 

5、<

6、g_child()" <

7、_child()" <

8、int**)&gc;    cout<< "[0]GrandChild::_vptr->" <

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。