首页 > 解决方案 > 为什么使用结构会增加应用程序的二进制大小?

问题描述

Bohdan Orlov 在 GitHub 上有一个相当受欢迎的存储库,名为 iOS Skills Matrix。
在那里,在“内存”行的“中间”列中,它指出

结构增加二进制大小

半年多前我第一次看到这个说法,从那以后我一直想知道它是否属实,如果是,为什么会这样?它是否与在函数调用中复制结构这一事实有关?

BohdanOrlov/ios 技能矩阵

标签: swiftstructcompilationfilesize

解决方案


这里开始(不是关于 Swift,但可能是答案)

C中,非零初始化或未初始化的静态结构(即静态到零以外的东西)会增加二进制大小(它们进入数据段,即即使您只初始化结构的一个字段,二进制包含完整结构的完整图像)

这里开始(不仅关于结构,而且可能也很有趣)

结构可以增加你的二进制大小。如果您将结构放入列表中,它们将在堆栈上创建,并且它们可以增加您的二进制大小。

可选的使用也会增加你的二进制大小。您将使用可选项,但您不知道编译器必须做很多事情;它必须进行检查,必须进行解包。因此,即使它只是一个带问号的单行代码,您的二进制文件也会有很多大小。

通用专业化是我们遇到的另一个问题。每当你使用泛型时,如果你想让你的泛型更快,编译器会专门化它们并给你增加相当多的二进制大小。

第一个引用是关于C的,这对我来说很有意义。我想Swift也发生了同样的事情。

如果是这样,原因是在某些情况下,您的结构对象没有在运行时初始化,而是存储在二进制文件中。

希望能帮助到你。


推荐阅读