C++ GCC C&x2B+;重写-单个类的frtti

C++ GCC C&x2B+;重写-单个类的frtti,c++,gcc,rtti,C++,Gcc,Rtti,当使用-frti编译整个翻译单元或某个类时,是否有方法避免生成类型信息 也许有一个神奇的#pragma或uuu属性uu可以覆盖命令行选项 提前谢谢。对我来说,似乎没有可能的魔法。此外,在我看来,任何一种这样的魔法都是破坏性的 允许用户从代码内部微调编译选项的唯一神奇的GCC-pragma是pragma-GCC-optimize 这个pragma在函数方面起作用,因为优化器本身在函数方面起作用,您可以很容易地看到,它对类型的RTTI生成没有影响。: #include <iostream>

当使用
-frti
编译整个翻译单元或某个类时,是否有方法避免生成类型信息

也许有一个神奇的
#pragma
uuu属性uu
可以覆盖命令行选项


提前谢谢。

对我来说,似乎没有可能的魔法。此外,在我看来,任何一种这样的魔法都是破坏性的

允许用户从代码内部微调编译选项的唯一神奇的GCC-pragma是
pragma-GCC-optimize

这个pragma在函数方面起作用,因为优化器本身在函数方面起作用,您可以很容易地看到,它对类型的RTTI生成没有影响。

#include <iostream>
#include <typeinfo>

struct X
{
  virtual int foo() {return 0;}
};

#pragma GCC optimize ("no-rtti")

struct Y
{
  virtual int foo() {return 0;}
};

#pragma GCC reset_options

int
main ()
{
  std::cout << "X: " << sizeof (X) << " " << typeid(X).name() << std::endl;
  // next line should *NOT* build/link if the pragma was taken into account
  std::cout << "Y: " << sizeof (Y) << " " << typeid(Y).name() << std::endl;
  return 0;
}

我的期望是,省略RTTI不会影响对象的大小——对于有vtable的类,类型信息存储为vtable条目,对于没有vtable的任何类,类型信息都是从静态类型生成的。因此,在没有RTTI的情况下进行编译不会带来太多好处,除了每个字节都很重要的嵌入式软件。
X: 8 1X
Y: 8 1Y