完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如图所示:我今天在优化代码的时候发现一个问题,①为什么我用下面的for语句来代替会出现code增加三个字节? ②难道for中的i=0和i<5这个判断暂用空间多? ③假如我要学程序优化该看什么书好呢? |
|
相关推荐
5个回答
|
|
首先回答第一个问题,不同的编译器在汇编的过程中是不同的,赋值在keil编译过程中,汇编成四条指令,占用8个byte的指令空间,如mop大神的图中显示,也可能是3byte,直接操作data段,for循环涉及i变量的初始化赋值,3byte的指令空间,Seg【i+5】=seg【i】,比较跳转自增一共21byte指令空间,所以我的for循环一共是24byte,赋值过程是3*5=15byte,所以我的就多了9byte,如果赋值的多呢,比如10组,那么就是3*10=30byte,那么赋值的就多6byte啦,不同的编译器编译出来的不一定一样,在没有这样精确到字节的指令空间的问题,建议用for循环,综合来讲是省空间的。
第二个问题,for循环中的i=0的初始化3byte,i++2byte,i<5的判断加跳转5byte,不见得用空间就多,还是刚才那句话,你要是循环100次,明显就减少了。 第三个问题学程序优化的问题,这个几个字节尚且谈不上程序优化的问题,优化程序在于算法,无非就是时间换空间,空间换时间的问题,建议读一下《算法导论》这本书,上学的时候看过,感觉不错,前提是你的数学要过关 |
|
|
|
|
|
|
|
|
|
|
|
如图所示:我用for来代替①②③④⑤code可以减少28字节。但是我上一个图问题是,用for不但不减少code反而增加3个字节,之前是五行代码,现在for比五行代码少code不减小就算了为什么还要多出3个字节。就算多出的3个代码被i=0;i<5;和i++这三个条件各占用一个字节,那么for(){}跟五行代码暂用的rom大小一样?@MOP |
|
|
|
云汉达人
1。for循环的三要素会导致最后增加3字节 2. 程序的优化分两种 如果你是想算法优化,时间复杂度空间复杂度等等,请参考《算法导论》 如果你是想做编译器优化,就是同样的代码怎么翻译成更少的字节数,请。。。。。。珍惜生命,不过中国需要你! |
|
|
|
只有小组成员才能发言,加入小组>>
750 浏览 0 评论
1135 浏览 1 评论
2515 浏览 5 评论
2852 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2701 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1018浏览 3评论
181浏览 2评论
447浏览 2评论
358浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
445浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-12 06:39 , Processed in 1.344134 second(s), Total 85, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号