对同一对象进行x调用的c++虚拟函数性能

c++ Virtual Function performance for x calls on the same object

本文关键字:c++ 虚拟 函数 性能 调用 对象      更新时间:2023-10-16

如果我在同一个对象上有一个to调用x的虚拟函数,编译器会足够聪明,以某种方式记住vtable地址吗?还是会在每次x调用时挖掘地址?干杯

只要通过继承或正常声明在类的定义中存在虚拟函数,就会创建vtable。

Vtables本身通常存储在静态数据段中,因为与特定于对象相比,它们是特定于类的。通常,每当创建类的对象时,指向类的vtable的vtable指针通常存储在对象的内存位置的开头,但这取决于编译器最终如何实现虚拟函数。

现在,只要对象仍在内存中,它就包括指向其Vtable的指针。因此,如果在同一对象上调用虚拟函数,则只引用指向Vtable的指针即可获得Vtable的位置。不需要挖掘地址。

对于类似的问题,这里有几个很好的答案:闭环中虚拟功能的成本

一般来说,为了理解C++对象模型和Stroustrup所做的实现选择,我推荐他的书《C++语言的设计和进化》。