我受限于嵌入式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文档描述了各种选项,但没有说它们是否更适合执行时间加速或代码大小减少。
答案 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)
您可以删除构建二进制文件以进一步删除所有调试。
构建完整的二进制文件后。
your_toolchain-strip a.out
e.g。 arm-none-linux-gnueabi-strip a.out