致命的';截面过大,可以';t编码';gcc中的内存地址(iPhone应用程序)

致命的';截面过大,可以';t编码';gcc中的内存地址(iPhone应用程序),iphone,ios,gcc,xamarin.ios,Iphone,Ios,Gcc,Xamarin.ios,我开发了一个MonoTouch iPhone应用程序。 目前,它通过解析生成所有对象的大量xml数据来工作。 我试图通过序列化这些对象并存储在SQLLite数据库中来提高启动速度。但这实际上是缓慢的。 相反,我所做的是编写一个程序,预解析这个xml,然后写出可以在运行时简单编译和实例化的类文件 这是一个巨大的速度提升,但我只能在gcc编译器失败之前编译一部分集合:我得到一个 “致命:部分太大,无法对r\U地址进行编码” 无法将地址编码为24位分散的重新定位条目的错误 有人能帮我解释一下吗?我不太

我开发了一个MonoTouch iPhone应用程序。 目前,它通过解析生成所有对象的大量xml数据来工作。 我试图通过序列化这些对象并存储在SQLLite数据库中来提高启动速度。但这实际上是缓慢的。 相反,我所做的是编写一个程序,预解析这个xml,然后写出可以在运行时简单编译和实例化的类文件

这是一个巨大的速度提升,但我只能在gcc编译器失败之前编译一部分集合:我得到一个

“致命:部分太大,无法对r\U地址进行编码”

无法将地址编码为24位分散的重新定位条目的错误

有人能帮我解释一下吗?我不太了解编译器,但我很想知道这是否可行,或者我是否做错了什么

每个单独的类都会编译,只有当我编译了许多类时,它才会失败。
没有特定数量的类导致它失败,也没有函数的长度,相反,它似乎是由应用程序代码的大小引起的

谢谢你抽出时间, 利亚姆

这已经是一个问题了

您可以做的是尽量减少应用程序的最终大小。为了减少应用程序的大小,您可以做以下几件事:

  • 启用链接(项目属性-iPhone构建-链接器行为:链接所有程序集)

  • 避免使用值类型的泛型,因为它会导致每个值类型发出一次代码(因此,如果您使用
    列表
    列表
    ,则列表代码将发出两次-对于较大的泛型类型,这可能会产生很大的差异)。请注意,所有类类型都将共享代码(因此
    List
    List
    将使用相同的代码),因此可以自由地将泛型与类类型一起使用


感谢Rolf,我确实找到了另一种方法来大幅缩减项目规模,现在它可以完美地工作了。谢谢你的回复。