首先我们只考虑简单代码块,就是一段代码片段,它不含有if/else/for/jump等任何跳转指令,不管是条件跳转但是非条件跳转。
比如下面这样的代码:
int a=3,b=4,c=5;
a = b+3;
c = a+1;
...
那么我们可以计算每个变量最后一次被读引用的位置(行号),然后从此之后,该变量所使用的空间(栈或者寄存器)就可以被其它的变量复用。这个算法实现起来也比较简单。
但是,如果我们允许编译器调整语句顺序(re-ordering),条件是不影响正确性。那么我们怎么找出哪种排序下可以最大化的重用存储空间呢?除了brute force列出所有排序并挨个挨个试,有其它更好的解法吗?我觉得至少可以把原始的代码分成更小的子块来枚举,有的子块只有一种可能性。
有什么paper吗?
--
FROM 107.139.34.*