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

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

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

只要在 class 的定义中有一个虚函数,无论是通过继承还是普通声明,都会创建一个 vtable。

Vtables 本身通常存储在静态数据段中,因为与对象 specific.Generally 相比,它们是 class 特定的,每当创建 class 的对象时,vtable 指针指向class的vtable一般存放在对象的内存位置的开头,但是要看编译器到底是怎么实现虚函数的。

现在只要对象保留在内存中,它就会包含指向它的指针 Vtable.So 如果你在同一个对象上调用虚函数,只引用指向 vtable 的指针来获取 vtable location.No 需要挖掘地址。

这里有几个类似问题的好答案: Cost of a virtual function in a tight loop

总的来说,要了解 C++ 对象模型和 Stroustrup 做出的实现选择,我推荐他的书 "The design and evolution of the C++ language"。