一、C++简单对象模型
一个ojbect是一系列的slots,每个slots指向一个members(data member or function member)
members都不放在objects之中,objects中有的只是一系列member的指针而已
-------------------简单对象模型中的索引思想引申出两指向成员的指针(pionter-to-member)这种设计。
二、表格驱动对象模型
object 本身含有两个分别指向 data member table和member function table的指针。member fucntion table是一系列的slots,而data member table 则直接含有data本身。
---------------------表格驱动对象模型的member function table思想引申出了virtual functions 的处理方案(虚函数表)
三、C++对象模型
1.nonstatic data member 放在 object 之内,static data member 放在object之外。
2.function members都放在object之外
3.object 产生一堆指向virtual functions的指针,形成virtual table(虚函数表),并有一个指针vptr指向这个表
简单对象模型对多继承处理方式:
在简单对象模型中派生类会有一个slot指向基类,优点是基类变化时,不会影响派生类的大小,缺点是间接性导致的空间和存取时间上的负担(要通过指针到基类中去访问)
在这种基础上,为了处理多继承,可以设计一个base class table,在派生类中,有一个指针指向这个表,这样,基类的大小和个数的变化就不会对派生类产生影响了。
C和C++的内存布局问题:
以前在做数据包解析的时候就曾经将长度不定的数据块定义在结构体最后,接受到数据后,根据数据长度算出整个帧的大小,再将收到的数据放入结构体的数据块内,如此再来进行后续解析,