关于虚函数和虚拟继承的内存分布
2013-03-10 19:43
225 查看
最近看《程序员面试宝典》,碰到虚函数的内存分布问题,顺便学习了内存对齐和虚拟继承的内存分布,将查到的资料按照自己的理解整理了一下,如若有误,请指正。
有关的资料:
http://blog.csdn.net/generalhking/article/details/7910072 http://blog.csdn.net/generalhking/article/details/8096222 http://blog.csdn.net/generalhking/article/details/7911595 http://wenku.baidu.com/view/70f9e26f7e21af45b307a8c3.html http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/05/2537451.html
(1)虚函数:基类与派生类共享基类的虚拟函数表
虚拟继承:基类与派生类 对 相同的 虚拟函数 共享基类的虚拟函数表
基类与派生类 对 不同的 虚拟函数 建立派生类自己的虚拟函数表
(2)内存布局顺序:
普通继承基类 虚拟函数表指针
虚基类表指针
数据成员
派生类 虚拟函数表指针
虚基类表指针
数据成员
虚拟继承基类 虚拟函数表指针
虚基类表指针
数据成员
(3)类中的虚拟函数表指针和虚基类表指针的大小与类中最大的数据类型的大小有关,如果不大于系统的32位数,按照4byte算,如果大于4byte,按照最大的数据类型的大小算。
举例
class Base
{
public:
virtual int f();
private:
char a;
double b;
};
sizeof(Base)的大小为24
(4)还有一中情况,原理我没搞懂,先列在这里,有知道的请不吝赐教
此例来自亚马逊面试题
class A
{
};
class B
{
};
class C
{
};
class D
{
};
class E:public virtual A,public virtual B,public virtual C,public virtual D
{
};
sizeof(E)大小是16
本文出自 “聪哥的博客” 博客,谢绝转载!
有关的资料:
http://blog.csdn.net/generalhking/article/details/7910072 http://blog.csdn.net/generalhking/article/details/8096222 http://blog.csdn.net/generalhking/article/details/7911595 http://wenku.baidu.com/view/70f9e26f7e21af45b307a8c3.html http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/05/2537451.html
(1)虚函数:基类与派生类共享基类的虚拟函数表
虚拟继承:基类与派生类 对 相同的 虚拟函数 共享基类的虚拟函数表
基类与派生类 对 不同的 虚拟函数 建立派生类自己的虚拟函数表
(2)内存布局顺序:
普通继承基类 虚拟函数表指针
虚基类表指针
数据成员
派生类 虚拟函数表指针
虚基类表指针
数据成员
虚拟继承基类 虚拟函数表指针
虚基类表指针
数据成员
(3)类中的虚拟函数表指针和虚基类表指针的大小与类中最大的数据类型的大小有关,如果不大于系统的32位数,按照4byte算,如果大于4byte,按照最大的数据类型的大小算。
举例
class Base
{
public:
virtual int f();
private:
char a;
double b;
};
sizeof(Base)的大小为24
(4)还有一中情况,原理我没搞懂,先列在这里,有知道的请不吝赐教
此例来自亚马逊面试题
class A
{
};
class B
{
};
class C
{
};
class D
{
};
class E:public virtual A,public virtual B,public virtual C,public virtual D
{
};
sizeof(E)大小是16
本文出自 “聪哥的博客” 博客,谢绝转载!
相关文章推荐
- 虚函数和虚拟继承的内存分布
- C++虚拟继承中对象内存的分布
- c++ 虚拟继承,gcc内存分布情况
- 多重继承和虚拟继承下的内存分布
- C++ 虚继承 虚函数 内存分布
- 类对象内存布局,虚函数,虚拟继承和多重继承的实现
- 【虚函数、虚拟指针、虚表指针】解析多重继承时,虚表的分布
- 【c++】深入剖析虚拟继承与各种继承关系中派生类内成员内存分布情况及虚基类表的内容
- c++11 学习及测试(虚继承 虚函数时类的内存分布)
- C++类内存分布——深度理解继承与虚函数
- c++虚函数实现机制以及类继承中的内存分布
- 关于虚函数,类的内存分布以及类的成员函数调用原理
- 【C++】虚函数和虚继承的内存分布情况
- C++虚拟继承__对象内存的分布_虚继承会多余分配虚表v-tab的指
- C++虚拟继承中_对象内存的分布_虚继承会多余分配虚表v-tab的指针vptr_图1-1清楚的描述了虚继承类对象内存的分布_转载淘宝共享数据平台
- 关于C++中的虚拟继承的一些总结
- 0053 关于虚继承与虚函数占用字节的探索
- 虚拟继承+虚函数,含有虚函数的菱形虚拟继承
- 从汇编看c++中的虚拟继承及内存布局(二)
- C++虚函数、虚继承、对象内存模型(转)