我可以在代码库中有选择地禁用RTTI以减少二进制大小吗?

时间:2017-09-07 18:32:36

标签: c++ rtti

我正在开发一款使用C ++的iPhone应用程序,并且几乎达到100 MB标记(Apple赢得了让人们通过WWAN下载它的时间点)。我已经采取了许多措施来减少二进制文件的大小,例如删除不需要的第三方依赖项。但是,应用程序,特别是二进制文件仍然很大,因为它具有很多功能。

我听说禁用RTTI可以减少二进制文件大小。是否可以关闭某些文件的RTTI,例如没有字符串的所有文件" typeid"或" dynamic_cast"在他们身上?

1 个答案:

答案 0 :(得分:2)

RTTI的空间成本与使用(通过typeiddynamic_cast)无关,而与每个类关联的类型信息无关。因此,好处是为各个类(或类组)禁用RTTI。

我知道没办法这样做。

可能发现如果你可以减少具有虚函数的类的数量,你可以减少RTTI信息的数量。 (例如,并非所有基类都需要具有虚拟析构函数 - 如果您可以调用delete pBase,则只需要这样做。)

另一件可能会破坏可执行文件大小的东西是很多模板。在许多情况下,您可以创建模板函数,只转发到非模板函数来完成实际工作。