4

我一直在研究非常大的 C++ 项目代码库。大约有 2k 个文件,包含大约 200k 行代码。代码包含大量模板的使用 代码中有很多内联 目前使用带有 O2 选项的 clang++ 进行编译 最终的可执行文件大小约为 50 MB

出于某种原因,我想进一步减小二进制大小。已经采取的步骤 1> 尽可能用非模板代码替换模板 2> 将 XML 库从 xerces 替换为 expat

欢迎在这方面提出任何建议

4

3 回答 3

2

以下方法通常用于减小程序的大小,

  1. 使用您的编译器特定技术来减小大小。

  2. 编译使用gcc -S program.c以获取汇编程序文件。您现在可以执行基于汇编程序的空间优化。

  3. 减少 C 中全局变量的数量。

  4. 使用简单的算法,而不是在执行时间上给您带来非常小的变化的复杂算法。例如,如果列表中的元素数量不是很大,则使用bubble sort代替。Merge sort

  5. 删除只使用一次或两次的简单功能。

  6. 消除死代码。许多大型项目中经常有一些。

  7. 请注意程序中包含的库函数。

于 2013-04-14T07:40:36.460 回答
1
  1. 在完成的可执行文件上运行strip以删除调试信息(注意,您也可以保留未剥离的文件,以防您以后需要调试信息)。
  2. 确保动态链接系统提供的库,而不是静态链接。
  3. 将重要函数从头文件移动到 .cpp 文件(例如,如果它们仅在同一个 .cpp 文件中用作实现细节,甚至可以应用于某些模板函数)。
  4. 追捕并消除死代码。许多项目都有很多这样的东西。考虑使用代码覆盖率分析器来帮助您找到要删除的候选者。希望您有一些测试可以帮助您。
  5. 考虑压缩实际的二进制文件。如果通过 gzip 或 bzip2 运行它有多大?
于 2013-04-14T07:32:09.413 回答
1

UPX是减少可执行文件大小的好工具。它支持许多平台和可执行格式。

可执行文件在启动时解压缩,执行此操作的代码包含在可执行文件本身中。性能损失很小。

于 2013-04-14T09:43:10.487 回答