iar代码优化影响运行速度吗_IAR程序优化

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:15   1360   0

优化与不优化的代码量比较:

1, 在未选择优化时

优化选项位置: 工程名右键-> Options->

选择优化选项:

代码量:

代码量大小是:

8 721 bytes of readonly code memory

269 bytes

of readonly data memory

793 bytes of

readwrite data memory (+ 12 absolute)

因为超过MCU的最大8Kbit 的 FLASH空间,导致报错。(芯片为STM8S103F3)

2,当程序选择优化后:

代码量大小变为:

7 591 bytes of readonly code

memory

263 bytes of

readonly data memory

793 bytes of

readwrite data memory (+ 12 absolute)

优化后代码节省近500byte

选择优化与不优化时,对程序编译的影响:

1,一般对于程序中,定义了而未使用的变量,如果选择了编译优化,程序一般对于这种程序语句会优化掉,不进行编译。 一般编译时,也会有提示,某变量定义了而未使用。

2,对于编译优化了的语句,在仿真运行时,一般表现为设置不了断点,因为那条语句已经被优化了。

这里以一个计算数据类型所占字节长度的程序为例:

特别注意:sizeof(); 是一个关键字,而不是一个函数。

使用它时,不需要添加它的头文件,因为没有,它可以直接使用。

a,程序的编译过程中,选择不优化时:

这时,编译程序,程序会有警告提示:

提示已有定义的变量,而未参与使用。

在定义的11个变量中,仅使用a,b两个变量,其余的9个都是没有使用的。

但是由于我们的编译器的优化里面 level选择的是none,所以9条语句依然编译了,依然会运行:

仿真时,会发现这些结果都会运算出来:

见上图,图片中a,b,c,d,e,f····

但是会发现,在计算过程中,sizeof()也是都计算出来了,并且都赋值给了对于的变量。

b,程序的编译过程中,选择优化时,先Level选择

low时:

编译时,9个警告依然曾在。

仿真时,发现程序仅仅运行了,用到的2个变量,其余的均未赋值过去,但是sizeof()的值都已计算出来。

c,如果选择优化等级更高的Medium和High的时候:

这时的由于本质上的定义的a,b,c,d····等都是没有使用的,所以全部被优化掉了。

仿真时,发现,都没有计算赋值过去:

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP