gpt4 book ai didi

c++ - 虚函数与函数指针 - 性能?

转载 作者:IT老高 更新时间:2023-10-28 21:59:34 25 4
gpt4 key购买 nike

在多态基类上调用 C++ 虚函数是否与调用 C 风格的函数指针一样快?真的有区别吗?

我正在考虑重构一些注重性能的代码,这些代码利用函数指针并将它们转换为多态中的虚函数。

最佳答案

我想说大多数 C++ 实现的工作方式与此类似(可能是第一个编译成 C 的实现,生成的代码如下):

struct ClassVTABLE {
void (* virtuamethod1)(Class *this);
void (* virtuamethod2)(Class *this, int arg);
};

struct Class {
ClassVTABLE *vtable;
};

然后,给定一个实例Class x,为其调用方法virtualmethod1就像x.vtable->virtualmethod1(&x),因此一个额外的取消引用,1 个来自 vtable 的索引查找,以及一个额外的参数 (= this) 压入堆栈/传入寄存器。

但是编译器可能可以优化函数内对实例的重复方法调用:由于实例 Class x 在构造后无法更改其类,因此编译器可以考虑整个 x .vtable->virtualmethod1 作为公共(public)子表达式,并将其移出循环。因此,在这种情况下,在单个函数中重复的虚方法调用在速度上将等同于通过简单的函数指针调用函数。

关于c++ - 虚函数与函数指针 - 性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17959246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com