当前位置: 代码迷 >> C++ >> 既是虚函数可以通过虚表技术去访问执行,为什么要有[thunk]:vcall技术
  详细解决方案

既是虚函数可以通过虚表技术去访问执行,为什么要有[thunk]:vcall技术

热度:9932   发布时间:2013-02-26 00:00:00.0
既然虚函数可以通过虚表技术去访问执行,为什么要有[thunk]:`vcall技术?
[thunk]: vcall技术的作用意义是什么?

------解决方案--------------------------------------------------------
引用:
[thunk]: vcall技术的作用意义是什么?


thunk是一种比较有效率的支持多重继承的虚函数实现方法。

在多重继承中,this指针常常需要由编译器视情况进行调整(单继承其实也一样,只不过许多实现常常使派生对象与基类对象的首地址设计在相同的相对位置,使得两者的地址一样罢了),调整量视第一个基类子对象的大小而定,如何调整?设计者设计了一些方法,thunk是比较有效率的一种,thunk将虚表中本来存放虚函数地址改为存放指向一小段代码的指针,这一段代码用来调整this的值,这种技术就被称为thunk。