堆栈或全局数据(堆) - 哪一个更适合将数据对象分配给寄存器

时间:2014-02-21 16:02:12

标签: architecture computer-architecture

当前的编程语言将数据存储在堆栈,全局数据区或堆中。在这种情况下,将数据对象分配给寄存器将是有效的,为什么?

1 个答案:

答案 0 :(得分:0)

将数据分配给寄存器有两个问题。编译器必须能够处理可能的别名,证明两个名称从不引用相同的数据,证明两个名称始终引用相同的数据,或者确定动态别名处理是否比寄存器分配的好处更便宜。编译器还必须估算保留寄存器中数据的成本。

(在加载 - 存储指令集中,所有数据都分配给寄存器,但在某些情况下,时间非常短。)

本地(堆栈)数据最容易分配给寄存器,因为它们的范围相对有限(因此分析使用寿命更简单)并且通常很容易证明它们不是别名。

全局数据的别名分析通常不如堆数据困难,但使用范围通常不如堆栈数据受限,因此成本/收益分析更加困难。 (在C中,函数和文件静态数据 - 它们是'全局' - 具有局部范围,使别名和成本/收益分析更简单。)

堆数据通常对别名分析最不友好(因为通常很难证明C语言中的代码没有别名)并且对成本/收益分析不太友好(因为使用的限制比本地更少) / stack data)。