【问题标题】:How to figure out which methods increases size of 'exe'如何确定哪些方法会增加“exe”的大小
【发布时间】:2011-07-03 18:48:26
【问题描述】:

我正在尝试在 MS Visual Studio Express 2010 中编写我的第一个“演示场景”应用程序。突然我意识到,在完全优化大小的发布版本中,我的二进制文件从 16kb 扩展到了 ~100kb。我的目标大小是 64k。有没有办法以某种方式“浏览”二进制文件以找出哪些方法会占用大量空间,以及我应该重写哪些?我真的很想知道我的二进制文件是由什么组成的。

从我在网上找到的情况来看,VS2010 并不是演示场景的最佳编译器,但我仍然想了解我的 .exe 文件中发生了什么。

【问题讨论】:

    标签: c++ executable visual-studio-2010


    【解决方案1】:

    我认为您应该让 MSVC 为您生成地图文件。这是一个文件,它将告诉您可执行文件中大多数不同函数的地址。连续地址之间的差异应该告诉您该函数占用了多少空间。要生成映射文件,请添加 /MAP 链接器选项。有关详细信息,请参阅: http://msdn.microsoft.com/en-us/library/k7xkk3e2(v=VS.100).aspx

    【讨论】:

    • 找到了一个很棒的工具来解析生成的地图文件link。可能有人会发现它也很有用。
    • 嗨,你能告诉我是否有一个预编译的二进制文件,我怎样才能知道二进制文件是用什么堆栈大小设置构建的?
    【解决方案2】:

    您可以从可执行文件中删除许多不必要的内容,并使用诸如mew 之类的实用程序对其进行压缩。

    【讨论】:

    • 非常感谢,我会试试这个实用程序。
    【解决方案3】:

    我发现这对于检查可执行文件大小很有用(尽管不适用于演示场景类型的东西):http://aras-p.info/projSizer.html

    我会这样说:如果您完全使用标准库,请立即停止。这是一个巨大的代码膨胀器。例如,std::sort 的每个独特用法增加了大约 5KB,并且许多标准容器的数字相似(当然,这取决于您使用的功能,但通常它们会添加大量代码)。

    另外,我不参与演示场景,但我相信人们使用Crinkler 来压缩他们的可执行文件。

    【讨论】:

    • 看起来它不适用于 VS2010 的 pdb,但无论如何谢谢。如果我切换到 VS2008,这个程序将非常有用。
    【解决方案4】:

    使用您的版本控制系统查看导致增加的原因。展望未来,我会在每晚构建期间记录构建的 exe 大小。并且不要忘记您可以使用编译器设置优化最小尺寸。

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2011-12-24
      • 2021-01-05
      • 1970-01-01
      相关资源
      最近更新 更多