【发布时间】:2009-11-24 04:20:31
【问题描述】:
是否有与 Visual Studio 的 __declspec(novtable) 参数等效的 g++?
基本上,在纯虚拟基类中,__declspec(novtable) 参数可用于抑制为基类创建 vtable 以及分别在构造函数/析构函数中创建 vtable 初始化/取消初始化代码。例如,
class __declspec(novtable) PureVirtualBaseClass
{
public:
PureVirtualBaseClass(){}
virtual ~PureVirtualBaseClass() = 0;
};
请参阅Paul DiLascia's article 了解更多信息。另见我的相关@987654322@。
【问题讨论】:
-
只是好奇:在我看来,为 PureVirtualBaseClass 丢弃 vtable 是一种微优化,而且通常是很小的优化。想要这样做的原因是什么?
-
阅读 DiLascia 的文章,他解释了想要比我做得更好的原因。
-
另外,今天在 MSDN 上找到了这个 msdn.microsoft.com/en-us/library/k13k85ky.aspx,他们建议使用 __declspec(novtable) 可以显着减小程序大小。
-
整个程序优化不会让编译器删除任何未实例化的类的 vtables 吗?
标签: c++ visual-studio g++ compiler-construction