【问题标题】:Is there a g++ equivalent to Visual Studio's __declspec(novtable)?是否有与 Visual Studio 的 __declspec(novtable) 等效的 g++?
【发布时间】: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


【解决方案1】:

我认为没有——如果有的话,它会列在 GCC 手册的type attributes page 下。 GCC 使用类型属性为类型添加额外的注释(例如对齐和填充),但没有列出与 __declspc(novtable) 等效的类型属性。

我在command line options 中也没有看到与此优化相关的任何编译器标志。

【讨论】:

  • 已经有一段时间了。这个答案仍然适用吗?
  • 我相信现在 gcc 有 -fdevirtualize 开关,它在 -O2 优化中
  • @Dave 不,根据-fdevirtualize gcc.gnu.org/onlinedocs/gcc/… 上的文档,这是完全不同的优化。
猜你喜欢
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 2011-04-24
  • 2011-03-15
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多