S32DS中代码优化选项都是干嘛用的

S32DS中代码优化选项都是干嘛用的_第1张图片

 

开局一张图,后面全靠查。这里最开始的那个选项是选择GCC编译的优化等级的,关于那个O2  O3 等优化了那些内容,推荐

https://www.cnblogs.com/wwcjj/p/9310671.html


-fsigned-char    换成有符号char
把char定义为有符号类型,如同signed char. 
这个选项等同于`-fno-unsigned-char ',他是the negative form of `-funsigned-char'的相反选项.

-funsigned-bitfields      位域变成无符号数
如果没有明确声明`signed'或`unsigned '修饰符,这些选项用来定义有符号位域 (bitfield)或
无符号位域.缺省情况下,位域是有符号的,因为他们继承的基本整数类型,如int ,是 有符号数. 

-ffunction-sections -fdata-sections
动态加载使用的方法和数据

-fno-common
GCC中文手册
即使未初始化的全局变量也分配在目标文件的bss 段,而不是把它们当做普通块(common block)
建立.这样的 结果是,如果在两个不同的编译结果中声明了同一个变量(没使用extern ),连接它
们时会产生错误. 这个选项可能有用的唯一情况是,你希望确认程序能在其他系统上运行,而其他系
统总是这么做. 

-fno-inline-functions
比如"-O3"将打开-finline-functions选项,但是可以用"-O3 -fno-inline-functions"既使用-O3的功能又关闭函数内嵌功能。

-ffreestanding 
按独立环境编译;他隐含声明了`-fno-builtin'选项,而且对main函数没有特别要求. 


-fno-builtin 
不接受不是两个下划线开头的内建函数(built-in function).目前受影响的函数有_exit, 
abort, abs , alloca, cos , exit, fabs, labs, memcmp, memcpy, sin , sqrt, 
strcmp, strcpy,和strlen. 

-fsingle-precision-constant
-fsingle-precision-constant 强制GCC不要将单一浮动转换为双重浮动


-flto 的用法:

LTO: (link-time optimizations) 链接时优化, 使整个程序在链接过程中实现二进程优化,降低目标码的体积,
例如:一个LTO的内核可以减少超过10%的尺寸大小,并且内核优化后比常规的内核快百分之几,
但是它目前的问题是需要占用更多的系统内存 以及更长的编译时间。


-fno-move-loop-invariants
禁用循环不变表达式
循环不变式主体是不变式,也就是一种描述规则的表达式。其过程分三个部分:初始,保持,终止。 
  (1)初始:保证在初始的时候不变式为真。
  (2)保持:保证在每次循环开始和结束的时候不变式都为真。
  (3)终止:如果程序可以在某种条件下终止,那么在终止的时候,就可以得到自己想要的正确结果。

你可能感兴趣的:(一分钟识点扫盲)