再具体化

再具体化（）是一种编译器优化技术，首先由格里高利·柴廷（Gregory J. Chaitin）等人于1981年提出并且被实现于PI.8编译器中。其通过重新计算某个值而不是从内存中加载该值的手段，来缩短程序运行时间。该技术可见于GCC等现代编译器中。

使用 
这项技术通常见于寄存器配置领域之中，因为在遇到寄存器不足的场景时，一些变量会被转移至内存，形成溢出变量（spilled variable）。考虑到重新从内存加载某个溢出变量的延迟很长，过多的溢出变量会降低程序性能。

传统的编译器优化技术，比如公共子表达式消除以及循环不变代码外提，往往更加注重减少乃至消除多余的计算。一般而言，这些技术往往能够有效降低运行程序所需的处理器周期，但与此同时却也为程序添加了许多变量以及加长了变量的生命周期。在寄存器配置压力较大的场景下，这些副效果会导致大量溢出变量的产生，进而形成性能开销。编译器此时可以根据成本效益分析，决定是否执行再具体化。若该分析显示再具体化的开销小于加载数值的开销，编译器便会消除掉一些原有的优化，来降低寄存器配置方面的压力。

原理 
再具体化的工作原理运用了表达式可达性（expression availability）的概念，会跟踪用于计算每个变量的表达式。倘若用于计算某个值  得表达式  的某个变量在运行过程中被修改，该表达式  则被定义为是不可达的，而该值  也无法被再具体化。此外，还要考虑到被再具体化的表达式的最大复杂性，以避免出现程序重复计算的复杂算法，比加载花费更多时间之类的问题。

参考 

編譯器最佳化