c++ - 我可以在我的代码库中有选择地禁用 RTTI 以减小二进制文件的大小吗?

标签 c++ rtti

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

我听说禁用 RTTI 可以减小二进制文件的大小。是否可以为某些文件关闭 RTTI,例如所有文件中都没有字符串“typeid”或“dynamic_cast”?

最佳答案

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

我不知道这样做的方法。

可能发现,如果可以减少具有虚函数的类的数量,就可以减少 RTTI 信息量。 (例如,并非所有基类都需要有一个虚拟析构函数 - 只有在调用 delete pBase 时才需要。)

另一个可能会增大可执行文件大小的因素是大量的模板。在许多情况下,您可以制作模板函数,这些函数只是转发给非模板函数来完成真正的工作。

关于c++ - 我可以在我的代码库中有选择地禁用 RTTI 以减小二进制文件的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46102982/

相关文章:

python - 在python中动态创建一个新类型

c++ - 在 switch case 节点中将 const int 指针转换为 int

c++ - 将迭代函数转换为递归

c++ - 如何防止 calloc 失败导致程序崩溃?

c++ - 哪些平台不在 type_info op== 中使用字符串比较?

delphi - 在运行时复制组件

C++ 模板 :-Warning in a function template

c++ - 使用指针动态分配数组

delphi - 在运行时创建接口(interface)实现者实例

delphi - EInsufficientRTTI 异常,消息 'Insufficient RTTi available to support this operation'