最近做个项目使用到优化的时候,一直有一些疑问:
1,使用的是
STM32F1,刚开始的时候使用O1级别优化,调试完成之后,改成了O2,做斜率的时候,明显感觉到了程序速度提升近2倍。而且其它的感觉也比以前块,以eeprom为例,本来O1的时候完全没问题,改成O2 后,就只能读不能写,找了半天才发现时序变了。
2,C++ Code Genera
tion 里面那么多选项,那些选项除了常用几个,其他具体都是做什么用的,感觉搞得不
是很明白,希望高手解答??
3,怎么样选择能使程序跑的最快,怎么样选择能使代码量最小了,感觉搞得也不是特别明白
说明:我程序在选择O1优化时候为81k左右,选择O2时降低到了73K左右,选择O3时候跟O1差不多,但是速度方面,O2和O3差的不多,跟O1都有明显提升
O0基本不优化
O1优化比较少。调试版本用。
O2加入了几个最实用的优化功能。基本没有优化出来的bug,推荐测试和发布版本用。典型比O1节省30%的程序空间,速度上也能快30%,如果循环多的话能快50%;
O3加入了很多怪异的优化功能,但是总体效果比O2的改进不明显,反倒在复杂代码的时候会出问题。而且O3的很多优化是互相矛盾的。比如速度和时间的权衡等,及个别时候会导致运行不如O2块,flash占用也比O2大的现象。但是总体来看,比如O2还是有一点点的效果。
Thumb比Arm能节省大约30%的代码空间,但是速度会慢30%左右,如果加密运算等移位加数**算多的时候ARM比Thumb能提高更多的速度也是有可能的。
一周热门 更多>