• qinsi
    2021-09-22
    线性扫描算法本质是一种贪心算法。通常来说贪心算法得出的是局部最优解,不一定是全局最优。不过文中的线性扫描算法描述比较简单,并没有提及最优化的目标(使用的寄存器最少?寄存器的利用率最高?spill和reload次数最少?)以及选择空闲寄存器的策略是什么。针对不同的优化目标,选择空闲寄存器的策略或许会有不同? 看到下一讲中的例子想到一种情况。比如有这样的代码: let x = ... if (...) { ... = x ... } else { ... } ... = x ... 活跃性分析会认为在整个if语句中变量x都是活跃的。但其实在else语句块中并不需要x,x所占用的寄存器或许就可以给else中的临时变量使用。如果最优化的目标是使用最少的寄存器的话,这里就是一个可以被进一步优化的点。不过我觉得这个是活跃性分析算法的问题,合并了不同代码块中同一个变量的不同生存期。更精确的分析应该还是要对不同变量之间的依赖关系建图。
    
    2
  • ifelse
    2022-09-19 来自浙江
    学习打卡
    
    