【问题标题】:Why does usage of structs increase application's binary size?为什么使用结构会增加应用程序的二进制大小?
【发布时间】:2018-09-17 16:49:24
【问题描述】:

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

结构增加二进制大小

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

BohdanOrlov/ios-skills-matrix

【问题讨论】:

    标签: swift struct compilation filesize


    【解决方案1】:

    来自here(不是关于 Swift,但可能是答案)

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

    来自here(不仅关于结构,而且可能也很有趣)

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

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

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

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

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

    希望对你有帮助。

    【讨论】:

    • 太棒了!非常感谢!
    猜你喜欢
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多