如何找出哪些方法会增加"exe"的大小
How to figure out which methods increases size of 'exe'
我正试图在MS Visual Studio Express 2010中编写我的第一个"demoscene"应用程序。突然我意识到,我的二进制文件在完全优化的大小发布版本中从16kb扩展到了~100kb。我的目标尺寸是64k。有没有办法以某种方式"浏览"二进制文件,找出哪些方法会占用大量空间,哪些方法应该重写?我真的很想知道我的二进制文件是由什么组成的。
从我在网上发现的情况来看,VS2010并不是最好的demoscene编译器,但我仍然想了解我的.exe文件中发生了什么。
我认为应该让MSVC为您生成一个映射文件。这是一个文件,它将告诉您可执行文件中大多数不同函数的地址。连续地址之间的差异应该告诉你函数占用了多少空间。要生成映射文件,请添加/MAP
链接器选项。有关更多信息,请参阅:http://msdn.microsoft.com/en-us/library/k7xkk3e2(v=VS.100(.aspx
您可以从可执行文件中去除许多不必要的内容,并使用mew等实用程序对其进行压缩。
我发现这对检查可执行文件的大小很有用(尽管不适用于demoscene类型的东西(:http://aras-p.info/projSizer.html
我要说的是:如果你正在使用标准库,那么立即停止。这是一个巨大的代码膨胀。例如,每个唯一的用法std::sort
会增加大约5KB,许多标准容器也有类似的数字(当然,这取决于您使用的函数,但通常它们会添加大量代码(。
此外,我不喜欢演示场景,但我相信人们会使用Crinkler来压缩他们的可执行文件。
使用您的版本控制系统来查看是什么导致了增长。接下来,我会在夜间构建期间记录构建的exe大小。别忘了,您可以通过编译器设置来优化最小大小。
- 数组索引的值没有增加
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 为什么我的代码在输出中增加了93天
- 终端不会为C++文件创建.exe文件吗
- 有效地使用std::unordered_map来插入或增加键的值
- 在Windows中以.exe的形式运行c++
- Visual Studio mkl_link_tool.exe链接错误
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 为什么要增加导致崩溃的指针
- PrintWindow函数在notepad.exe中出错
- VSCode C++ 编译的exe感染了Win32:TrojanX-gen[Trj]
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 获取当前正在运行的 exe 名称(不是路径)
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 1d.exe找不到SFML文件?
- VI工作室代码错误无法打开输出文件主.exe
- 增加传递地址的值
- 包含命名空间会增加exe的大小吗
- 为什么生成pdb文件会增加本机c++ exe文件的大小?
- 如何找出哪些方法会增加"exe"的大小