C程序优化的问题
时间:10-02
整理:3721RD
点击:
我最近写好了一个工程,程序也都调通了,不过实时性达不到要求,所以在编译时我选择了优化级别。很奇怪,我选择O3和O2时,程序运行的结果是错误的,而用O1级时就OK了,但是O1级还是满足不了我的实时性要求。
所以想问一下大家这是怎么回事呢,应该检查哪部分呢,谢谢,感激之
没人碰到过吗?自己顶一个
能讲一讲优化的规则吗?
我的程序情况大致是这样的:程序包括发送和接收模块,接收模块又细分为接收的物理层模块和解码模块(上层模块)。发送模块单独测试时用O3优化级OK的,J接收的解码部分单独测试时用O3模块也OK的,然后,整个程序合起来用O3就不行(但O1行),这就可以肯定问题出在接收部分的物理层部分。但是,我看参考书上讲的O3和O1的区别,真的找不到接收物理层模块关于这方面的问题所在啊,觉得按照书上讲的,应该是O3和O1都不会有问题的呀,郁闷中。。。希望得到有这方面经验的高手们指点
我的那个工程用O3去build没问题,就是程序RUN的时候不是我所要的结果,觉得程序在乱跳,况且设断点时看某个变量时,该变量在程序中的取值不会在0-10范围内,结果断点时见它为1000多的一个数,觉得很奇怪。到底是怎么回事呢?
使用03,02优化容易出问题,编译完成以后使用MIX模式看一下程序,有的语句可能就被优化掉了。在关键变量使用VOLATILE变量试一下。O3,O2优化的速度还是很快的,我还是喜欢用,编译的时候注意一些旧好了。
在关键变量使用VOLATILE变量,产生反汇编代码,感觉存在的问题的地方对照反汇编代码看。
呵呵,不错不错,按照上面几位老兄的指点,果然把这问题搞定了....呵呵,O3真的是快啊,呵呵!谢谢各位的指点啊,也欢迎大家一起交流
我现在也遇到了同样的问题,确实是o3,o2就有问题,o1就好,但是速度跟不上,现在打算自己把关键的函数写汇编,再去学习楼上说的VOLATILE变量测试方法。
先去看看o1,o2,o3的区别。