【问题标题】:Library code memory footprint analysis库代码内存占用分析
【发布时间】:2010-06-19 11:08:14
【问题描述】:

假设我们有一个编译成 .a 文件的库。之后,该库与其他代码链接到某个可执行文件 .exe 中。 .a 文件的大小为 6Mb,而 .exe 文件的大小为 3Mb。对此的明显解释是链接器从库中抛出了未使用的代码。 我想知道的是最终可执行文件中真正库的代码足迹。

【问题讨论】:

    标签: c linker executable static-libraries memory-footprint


    【解决方案1】:

    查看链接器选项。链接器通常可以选择生成映射文件。这是链接到最终图像的函数列表以及它们的来源。听起来您正在使用 gcc,请使用 -map 选项。

    【讨论】:

      【解决方案2】:

      一个库有很多功能的实现。一个exe使用其中的一些。喜欢的人只在exe中添加exe使用的功能代码。

      【讨论】:

      • 这就是我所说的“对此的明显解释是链接器从库中抛出了未使用的代码”
      • 但如果您使用 LIB 文件,则必须如此设计。如果使用的 LIB 很大,并且只使用 LIB 中的一个函数,那么只有 LIB 中的一个 OBJ 及其依赖项将被添加到 EXE。另一方面,如果您在一个 OBJ 文件中放置大量函数并将其链接到您的应用程序,则整个 OBJ 将被添加到 EXE。关于附加开关,可以从导入的 OBJ 文件中删除未使用的功能。
      • 例如,在en.wikipedia.org/wiki/Static_linking 中,您可以阅读以下内容:“使用静态链接,包含目标可执行文件(或目标库)直接和间接引用的库的那些部分就足够了。使用动态库,加载整个库,因为事先并不知道应用程序会调用哪些函数。这种优势在实践中是否显着取决于库的结构。”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2017-04-25
      相关资源
      最近更新 更多