分类:
2009-03-23 21:28:48
调试优化过的代码
l 优化的重要性
优化代码不仅能够节省程序运行的时间,而且能够减少程序运行的内存空间。
优化可能使得某些代码被移动或者删除,变量分配的改变(比如说有些变量被分配给了寄存器),程序控制流发生了改变,未使用的变量被删除。
l 调试优化的困难
当优化过程中改变了代码,调试器如果没有和编译器进行良好的沟通的话,调试过程就可能出现错误,比如说设置断点,原本调试器可能是要在某一个分支设置断点,可能优化的过程中,该分支被删除了,则设置的断点可能就出现了错误,又比如说如果调试器给出了某一个变量的信息,可能优化的时候该变量的地址发生了改变,则给出的信息就是不可靠的了。
l 在调试过程中优化的原因
如果应用程序的性能越好,则调试进程也会执行得越快。不过开发人员在开发阶段,都是关闭优化开关的,只有在发布产品的时候,才会打开优化开关。
l 编译器优化概览
以下稍微列举了编译器优化的手段:
1. 代码提升;
2. 代码移动;
3. 常量折叠;
4. 副本传播;
5. 清除不再使用的内存空间;
6. 清除不再使用的代码;
7. 消除公用的子表达式;
8. 寄存器分配;
9. 内联函数扩展;
10. 将尽可能多的代码移出循环体;
11. 交互式跳转
l 为调试器创建优化的问题
当代码位置改变或者执行过程改变的时候,很难报告出错的正确位置。一般会出现以下几种问题:
1. 变量不可知;
2. 报告不正确的变量值;
3. 不对应的目标代码;
4. 一对多或者多对一映射问题;