哪些修改会导致C ++代码中二进制大小的缩小

时间:2013-04-14 07:18:09

标签: c++ templates

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

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

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

3 个答案:

答案 0 :(得分:1)

  1. 在已完成的可执行文件上运行strip以删除调试信息(例如,您可以保留未提取的文件以防以后需要调试信息)。
  2. 确保动态链接系统提供的库,而不是静态链接。
  3. 将非常规函数从头文件移动到.cpp文件(甚至可以应用于某些模板函数,如果它们仅用于相同的.cpp文件中作为实现细节)。
  4. 追捕并消除死代码。许多项目都有相当一部分。考虑使用代码覆盖率分析器来帮助您找到要删除的候选者。希望你有一些测试可以提供帮助。
  5. 考虑压缩实际的二进制文件。如果你通过gzip或bzip2运行它有多大?

答案 1 :(得分:1)

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

  1. 使用特定于编译器的技术来缩小尺寸。

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

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

  4. 使用简单的算法代替复杂的算法,这些算法可以让您在执行时间上进行非常小的更改。例如,如果列表中的元素数量不是很大,则使用bubble sort而不是Merge sort

  5. 删除仅使用一次或两次的简单函数。

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

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

答案 2 :(得分:0)

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

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