【问题标题】:How do I find out where the size of the final executable comes from in C++?如何在 C++ 中找出最终可执行文件的大小来自哪里?
【发布时间】:2021-09-26 18:10:33
【问题描述】:

假设我有一个 C++ 程序,它在编译时会生成一个可执行的二进制文件,大小为数兆字节。我怎么知道这个尺寸是从哪里来的?是否有工具可以显示 X% 的大小来自文件或类 Y 等?

理想情况下,我正在寻找一种类似于Disk Usage Analyzer 的工具,它可以将构成可执行文件的内容分解为某种饼图或其他图表。如果没有,至少有可用的信息可以创建图表。

最终目标是确定我可以从可执行文件中排除的程序部分,以缩小它并优化大小,从最大的不必要代码开始。

【问题讨论】:

  • This 也可能有帮助。
  • 你可以看看Bloaty McBloatface,如果只是为了名字。
  • 如果您只是假设其中 90% 来自您正在使用的库,包括 C++ 提供的库,那么您可能不会太远。
  • @PaulSanders 谢谢,Bloaty 真的很好用!这是我最终使用的命令:./bloaty filenamehere -n 0 -d compileunits --csv > output.csv。如果您将此作为答案发布,我会接受。

标签: c++ executable filesize


【解决方案1】:

您可以查看Bloaty McBloatface,它声称旨在执行此操作:

有没有想过是什么让你的二进制文件变大了? Bloaty McBloatface 将向您显示二进制文件的大小配置文件,以便您了解内部空间占用的情况。

Bloaty 对二进制文件进行深入分析。使用自定义 ELF、DWARF 和 Mach-O 解析器,Bloaty 旨在准确地将二进制文件的每个字节归因于生成它的符号或编译单元。它甚至会反汇编二进制文件以查找对匿名数据的引用。有关 Bloaty 执行分析的更多信息,请参阅 doc/how-bloaty-works.md。

Bloaty 适用于二进制文件、共享对象、对象文件和静态库(.a 文件)。支持以下文件格式:

精灵
马赫-O
WebAssembly(实验性)

【讨论】:

    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2010-10-01
    • 1970-01-01
    • 2023-03-28
    • 2019-02-24
    • 1970-01-01
    相关资源
    最近更新 更多