哪个gcc选项减少代码大小?

时间:2013-10-21 10:18:07

标签: c gcc compiler-optimization powerpc compiler-options

我受限于嵌入式PowerPC系统的128Kb限制可执行文件大小。不幸的是,使用选项-Os来优化大小不起作用,因为我认为是编译器错误(-Os的链接由于对_restgpr_30_x和类似的未定义引用而失败),而与-O[123]一切都很好。这是使用gcc 4.8.1 host = i86,target = powerpc-wrs-vxworks。

我的下一个想法是有选择地使用各种优化选项。但是这些选项中的哪一个会减少代码大小而不是执行时间?我继续单独使用一些选项,并发现-O2和

-fno-caller-saves
-fno-cse-follow-jumps
-fno-hoist-adjacent-loads
-fno-inline-small-functions
-fno-optimize-sibling-calls
-fno-peephole2
-fno-reorder-functions
-fno-rerun-cse-after-loop
-fno-tree-vrp
-fno-reorder-blocks
-fno-tree-vect-loop-version

使用时减少代码大小。有比实验更系统的方法吗? GCC文档描述了各种选项,但没有说它们是否更适合执行时间加速或代码大小减少。

3 个答案:

答案 0 :(得分:1)

-Os除了:

之外还支持所有-O2优化

-falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks   -freorder-blocks-and-partition -fprefetch-loop-arrays -ftree-vect-loop-version

请记住,-Os使gcc执行其他操作以减小尺寸,因此可能不够。

答案 1 :(得分:1)

我所取得的唯一显着差异是使用-s

仅使用它,我的可执行文件从90 KB缩小到40 KB。问题中提到的各种选项只会进一步减少到39 KB。

这些与尺寸相关的选项中的许多都被描述为here但是再次 - 我过去曾尝试过这些选项,其中没有一个(除了-s之外)产生了重大影响。

答案 2 :(得分:0)

您可以删除构建二进制文件以进一步删除所有调试。

  1. 首先使用默认设置进行构建。
  2. 构建完整的二进制文件后。

    your_toolchain-strip a.out

  3. e.g。 arm-none-linux-gnueabi-strip a.out