优化与不优化的代码量比较:
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····等都是没有使用的,所以全部被优化掉了。
仿真时,发现,都没有计算赋值过去:
|