7

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

我的下一个想法是有选择地使用各种优化选项。但是这些选项中的哪一个会减少代码大小而不是执行时间?我继续单独使用一些选项,发现 -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 文档描述了各种选项,但没有说明它们是否更适合执行时间加速或代码大小减少。

4

3 回答 3

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 执行其他操作以减小大小,因此可能还不够。

于 2013-10-21T13:40:03.640 回答
1

我曾经实现的唯一显着尺寸差异是使用-s.

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

此处描述了许多与尺寸相关的选项,但又一次 - 我过去曾尝试过它们,但它们(除了-s)都没有产生重大影响。

于 2018-06-04T19:02:15.593 回答
0

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

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

    your_toolchain-strip a.out

例如arm-none-linux-gnueabi-strip a.out

于 2013-10-21T11:20:40.300 回答