我正在开发一款使用C ++的iPhone应用程序,并且几乎达到100 MB标记(Apple赢得了让人们通过WWAN下载它的时间点)。我已经采取了许多措施来减少二进制文件的大小,例如删除不需要的第三方依赖项。但是,应用程序,特别是二进制文件仍然很大,因为它具有很多功能。
我听说禁用RTTI可以减少二进制文件大小。是否可以关闭某些文件的RTTI,例如没有字符串的所有文件" typeid"或" dynamic_cast"在他们身上?
答案 0 :(得分:2)
RTTI的空间成本与使用(通过typeid
或dynamic_cast
)无关,而与每个类关联的类型信息无关。因此,好处是为各个类(或类组)禁用RTTI。
我知道没办法这样做。
你可能发现如果你可以减少具有虚函数的类的数量,你可以减少RTTI信息的数量。 (例如,并非所有基类都需要具有虚拟析构函数 - 如果您可以调用delete pBase
,则只需要这样做。)
另一件可能会破坏可执行文件大小的东西是很多模板。在许多情况下,您可以创建模板函数,只转发到非模板函数来完成实际工作。