首页 > 解决方案 > 调用所有标志 -Os 手动使用不会产生相同的结果(GCC)

问题描述

我使用 -O1 编译并手动使用以下标志:

          -fthread-jumps 
          -falign-functions  -falign-jumps 
          -falign-loops  -falign-labels 
          -fcaller-saves 
          -fcrossjumping 
          -fcse-follow-jumps  -fcse-skip-blocks 
          -fdelete-null-pointer-checks 
          -fdevirtualize 
          -fexpensive-optimizations 
          -fgcse  -fgcse-lm  
          -fhoist-adjacent-loads 
          -finline-small-functions 
          -findirect-inlining 
          -fipa-sra 
          -foptimize-sibling-calls 
          -fpartial-inlining 
          -fpeephole2 
          -fregmove 
          -freorder-blocks  -freorder-functions 
          -frerun-cse-after-loop  
          -fsched-interblock  -fsched-spec 
          -fschedule-insns  -fschedule-insns2 
          -fstrict-aliasing -fstrict-overflow 
          -ftree-switch-conversion -ftree-tail-merge 
          -ftree-pre 
          -ftree-vrp

除了

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

这应该对应于 -Os 根据https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Optimize-Options.html所做的(我使用 GCC 4.8.2)。但是,生成的二进制文件与我使用 -Os 时不同。

(注意,我正在为 mcu68332 进行交叉编译)。

为什么会这样?

标签: gccoptimizationcompilationcompiler-flags

解决方案


推荐阅读