STM32-3.4中曾

-fforce-addr

地址必须复制到寄存器中才能对其进行操作。由于所需地址通常较早加载到寄存器中,因此此选项可以改进代码。

-finline-limit=n

对于超过n条伪指令的函数,编译器不会进行内联扩展,默认值为600。增加这个值会增加编译时间和内存占用,生成的二进制文件大小也会增加。这个值不应该太大。

-fmerge-all-constants

尝试将跨编译单元的所有常量值和数组合并到一个副本中。但是标准的 C/C++ 要求每个变量必须有不同的存储位置,所以这个选项可能会导致一些不兼容的行为。

-fgcse-sm

在全局公共子表达式消除之后运行存储移动,以尝试将存储移出循环。gcc-3.4 中的选项曾经属于“-O2”级别。

-fgcse-las

消除全局公共子表达式消除后存储到同一存储区域后的冗余负载。gcc-3.4 中的选项曾经属于“-O2”级别。

-floop-优化

已过时(GCC-4.1 包含在“-O1”中)。

-floop-optimize2

使用循环优化器的改进版本而不是“-floop-optimize”。优化器将使用不同的选项(-funroll-loops、-fpeel-loops、-funswitch-loops、-ftree-loop-im)来控制循环优化的不同方面。这个新版本的优化器目前正在开发中,生成的代码质量不比以前的版本高。已弃用,仅存在于 GCC-4.1 之前的版本中。

-funsafe 循环优化

假设循环不会溢出,并且循环的退出条件不是无限的。这将允许在广泛的范围内进行循环优化,即使优化器本身无法判断它是否是正确的做法。

-fsched-spec-load

一些加载指令被允许执行一些推测动作。

-ftree-loop-linear

对树执行线性循环变换。它提高了缓冲区性能并允许进一步的循环优化。

-fivopts

对树执行归纳变量优化。

-ftree-矢量化

在树上执行循环向量化。

-跟踪器

图片[1]-STM32-3.4中曾-老王博客

执行尾部复制以增加超级块的大小,这简化了功能控制的流程,允许其他优化做得更好。据说非常有效。

-funroll-loops

仅展开循环数可以在编译时或运行时确定的循环将导致更大的代码大小和可能更快或更慢的执行。

-fprefetch 循环数组

生成数组预取指令,对于使用巨大数组的程序可以加快代码执行速度,适用于大型数据库相关软件等。具体如何工作取决于代码。

-fweb

建立一个经常使用的缓冲区网络,以提供更好的缓冲区使用率。gcc-3.4 中的选项曾经处于“-O3”级别。

-ffast-数学

违反 IEEE/ANSI 标准来提高浮点计算的速度是一个危险的选择,只有在编译不需要严格遵守 IEEE 规范并且浮点密集型的程序时才应该考虑。

-fsingle-precision-constant

将浮点常量视为单精度常量,而不是将它们隐式转换为双精度。

-f 分支概率

在使用 -fprofile-arcs 选项编译程序并执行它以创建包含每个代码块的执行次数的文件后,可以使用该选项重新编译程序,文件中产生的信息将用于优化那些频繁出现的分支代码。如果没有这些信息,gcc 会猜测哪个分支可能会频繁出现并进行优化。此类优化信息将存储在以源文件命名并以“.da”为后缀的文件中。

-frename-registers

试图驱除代码中的虚假依赖项,此选项在具有大量寄存器的机器上运行良好。gcc-3.4 中的选项曾经处于“-O3”级别。

-fbranch-target-load-optimize

-fbranch-target-load-optimize2

分支目标缓冲区加载优化在执行序列开始和结束之前执行。

-fstack-保护器

在关键函数的堆栈上设置守卫值。此保护值将在返回地址和返回值之前进行验证。如果发生缓冲区溢出并且保护值不再匹配,则程序退出。每次程序运行时32位程序最大寻址空间,守卫值都是随机的,所以无法远程猜到。

-fstack-保护器-所有

同上,但在所有函数的栈上设置守卫值。

–param max-gcse-memory=xxM

用于执行GCSE优化的最大内存量(xxM)32位程序最大寻址空间,太小将无法优化,默认为50M。

–param max-gcse-passes=n

执行 GCSE 优化的最大迭代次数,默认为 1。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论