2020-01-18 18:47发布
gmajvfhpa 发表于 2016-1-8 23:25 编译器很聪明,它知道aa1赋值后会左移8位,所以赋值时,只赋低8位,高8位它根本不管它。软件仿真时,高8位 ...
最多设置5个标签!
也可以说是过度优化的结果,将优化级别调到最低就一切都正常了,调高优化级别编译器为了完成优化任务就得耍点小聪明当然这也是你逼的。
总之有优化的话不要相信单步仿真的结果,但就这个程序来看最终的执行结果应该是对的。
公共子表达式消除
该编译器可识别代码中的公共子表达式,并将结果用于每个实例,不再重复求值。例如,您的代码可能在多个地方使用表达式 a+1。该编译器识别此表达式并仅对其求值一次,然后将结果用于所有后续实例
有时间的话,看一下MDK优化后的反汇编代码
Tips: 在有优化的情况下,不要相信watch窗口的显示值;
公共子表达式消除
该编译器可识别代码中的公共子表达式,并将结果用于每个实例,不再重复求值。例如,您的代码可能在多个地方使用表达式 a+1。该编译器识别此表达式并仅对其求值一次,然后将结果用于所有后续实例
有时间的话,看一下MDK优化后的反汇编代码
Tips: 在有优化的情况下,不要相信watch窗口的显示值
一周热门 更多>