【发布时间】:2013-09-11 16:07:07
【问题描述】:
如果我有许多使用具有纯虚拟接口的其他类的类,编译器是否可以在启用完全优化的情况下对其进行优化,使其在 Release Mode 中没有虚拟调用?
例如,我有一个类 HardwareBuffer,其中包含指向 IHardwareResourceManager 的指针,该指针具有虚方法:
virtual void ReleaseBuffer(HardwareBuffer* buffer) = 0;
在HardwareBuffer的Release方法中,我调用了
m_pHardwareResourceManager->Release(this);
有一个类Render 继承IHardwareResourceManager,我实际上在其中实现了虚拟Release 方法。当我创建一个HardwareBuffer 时,我将它的m_pHardwareResourceManager 设置为Renderer 本身。
HardwareBuffer的Release方法中对IHardwareResourceManager::Release的调用可以去虚拟化吗?
【问题讨论】:
-
你的格式伤害了我的眼睛。你能让这个更具可读性吗?
-
这可能作为代码更具可读性。如果我理解正确,我会说在大多数情况下虚拟功能不会被优化掉。查看stackoverflow.com/questions/2141726/… 了解更多信息。
-
在少数情况下,变量的类型,即使它以多态方式使用,在编译时也是未知的,所以当您担心虚函数性能时(VTABLE 及其固有指令缓存冲突),通过 CRTP 实现静态多态性可能是一个不错的选择
-
所以,编写如下代码:pastebin.com/MwiSceUD?
标签: c++ optimization visual-studio-2012 compiler-construction