【发布时间】:2018-09-17 16:49:24
【问题描述】:
在 GitHub 上有一个相当流行的存储库,名为 iOS Skills Matrix,作者是 Bohdan Orlov。
在那里,在“内存”行的“中间”列中,它指出
结构增加二进制大小
半年前我第一次看到这个说法,从那以后我一直想知道它是否属实,如果是,为什么会这样?它是否与在函数调用中复制结构这一事实有任何关系?
【问题讨论】:
标签: swift struct compilation filesize
在 GitHub 上有一个相当流行的存储库,名为 iOS Skills Matrix,作者是 Bohdan Orlov。
在那里,在“内存”行的“中间”列中,它指出
结构增加二进制大小
半年前我第一次看到这个说法,从那以后我一直想知道它是否属实,如果是,为什么会这样?它是否与在函数调用中复制结构这一事实有任何关系?
【问题讨论】:
标签: swift struct compilation filesize
来自here(不是关于 Swift,但可能是答案)
在 C 中,未初始化或未初始化的静态结构(即静态到零以外的值)会增加二进制大小(它们进入数据段,即即使您只初始化一个结构的一个字段,二进制包含完整结构的完整图像)
来自here(不仅关于结构,而且可能也很有趣)
结构可以增加你的二进制大小。如果您将结构放入列表中,它们会在堆栈上创建,它们可以增加您的二进制大小。
Optionals 的使用也会增加您的二进制文件大小。您将使用可选项,但您不知道编译器必须做很多事情;它必须进行检查,必须进行解包。因此,即使它只是一个带问号的单行代码,您的二进制文件也会变得很大。
通用专业化是我们遇到的另一个问题。每当你使用泛型时,如果你想让你的泛型更快,编译器会专门化它们并给你增加相当多的二进制大小。
第一个引用是关于 C 的,这对我来说很有意义。我想 Swift 也会发生同样的事情。
如果是这样,原因是在某些情况下,您的结构对象没有在运行时初始化,而是存储在二进制文件中。
希望对你有帮助。
【讨论】: