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

本文探讨了IAR编译器在优化和未优化状态下对STM8S103F3芯片代码量的影响。优化后,代码量减少约500字节,节省了内存空间。优化可能导致无法设置断点,并可能移除未使用的变量。通过一个计算数据类型大小的例子,展示了不同优化级别下,编译器如何处理未使用的变量和sizeof()关键字的计算。在低级别优化中,未使用变量仍然计算,而在中高优化级别下,这些变量将被完全优化掉。
摘要由CSDN通过智能技术生成

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

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····等都是没有使用的,所以全部被优化掉了。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值