【发布时间】:2020-11-24 21:04:46
【问题描述】:
我想知道是否有一种方法可以优化以下情况:
struct A{
virtual process(int x) const = 0;
virtual ~A() = default;
};
void useA(A const &a){
for(int i = 0; i < 1000; ++i)
a.process(i);
}
在这种情况下,如果我们以某种方式承诺不会更改a vtable,则虚拟查找只能在循环之外进行一次。
有没有办法做这样的事情或结果将非常微不足道?或者可能还有其他一些我还没有看到的问题?
【问题讨论】:
-
如果我没记错的话,一些编译器上有一个命令行标志告诉它你不要在 this 指针上重建另一个对象
-
我认为你可以使用这个编译选项:clang.llvm.org/docs/…
-
难道分支(/jump) 预测器不能做正确的工作吗?
-
如果进程需要“长”时间,虚拟呼叫应该可以忽略不计。如果流程很短,真的有问题吗?如果是的话,也许改变原型直接取范围。
-
无论您使用什么调度,如果您在数据块上构建与性能相关的调度,而不是单独处理单个数据点,它总是会更快。
标签: c++ optimization vtable