当类层次结构中只有一个类时,请避免在每个功能呼叫上读取V-Table的开销



我有一个可能会被其他方扩展(继承)的类。

所以我将"合理可行的"函数声明为virtual

在我当前的应用程序上,此类永远不会继承。

因此,这样做似乎很浪费,因为在每个功能上读取V台的开销。

当类层次结构中只有一个 v-table时,我一直在考虑一种优化它的方法。

,但似乎不可能,因为编译器无法推断这一重要信息。

因此,唯一想到的解决方案是与预处理器有关,但我怀疑有一个。

我很确定我不是第一个遇到此问题的人,因此任何建议都将不胜感激...

更新:

也许我应该将标题文件留而没有任何virtual,并在需要时添加其他用户。

,但听起来不像正确的方式...

如果您进行了验证,这是瓶颈,那么进行此小解决方法可能值得:

#define omg_virtual 

及以后添加更多类:

#define omg_virtual virtual

或简单地在代码库上进行搜索。

您不应使每个方法虚拟。这应该是一个真正的设计决定,而权衡是针对灵活性的小表现。

对于您的用例,很可能编译器可以将您的呼叫推断为虚拟方法,不需要查找vtable并将其丢弃。

最新更新