如何确定哪些方法会增加“exe”文件的大小

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

从我在网上找到的信息来看,VS2010不是最适合demoscene的编译器,但我仍然想了解我的.exe文件内部发生了什么。

4个回答

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

发现了一个很棒的工具,可以解析生成的地图文件 [链接](http://code.google.com/p/mapfile/)。也许有人会觉得它很有用。 - Andrew
你好,如果我有一个预编译的二进制文件,如何找出它是使用什么堆栈大小设置构建的呢? - Abhinav

2
你可以使用像mew这样的工具从可执行文件中剥离掉许多不必要的内容并进行压缩。

2
我发现这个工具对于检查可执行文件大小很有用(尽管不适用于演示场景类型的事物):http://aras-p.info/projSizer.html 我想说的是:如果你使用标准库,那么请立即停止。它是一个巨大的代码膨胀器。例如,每个唯一使用std::sort就会增加约5KB的代码量,对于许多标准容器也有类似的数字(当然,这取决于你使用的功能,但通常它们会添加大量代码)。
另外,我不了解演示场景,但我相信人们使用Crinkler来压缩他们的可执行文件。

看起来它不能与来自VS2010的pdbs一起使用,但还是谢谢。如果我切换到VS2008,这个程序将非常有用。 - Andrew

0

使用您的版本控制系统查看导致增加的原因。今后,在夜间构建期间记录构建的exe文件大小。别忘了可以通过编译器设置进行最小化大小优化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接