gpt4 book ai didi

compiler-construction - 编译器如何将数百个变量存储在几个寄存器中?

转载 作者:行者123 更新时间:2023-12-02 08:27:34 24 4
gpt4 key购买 nike

假设您有一台只有 4 个寄存器 A、B、C 和 D 的虚拟机。编译器如何在有限的空间内存储如此多的变量?

是否有多种方法可以做到这一点,或者是否有一种可靠的方法可以做到这一点?这是什么花哨的科学术语,也被认为是一个复杂的问题?

谢谢

最佳答案

我建议您阅读 Programming Language PragmaticsDragon Books ,特别是关于 register allocation 的章节.

简而言之,有很多方法可以处理这种情况。通常编译器构建一个 intermediate representation这可以是 abstract machine有无限数量的寄存器或 SSA形式。当为特定目标硬件/操作系统生成代码时,这些抽象寄存器会根据抽象寄存器的使用频率或生命周期(即您的原始变量)等标准分配给实际寄存器或堆栈位置。

根据所选的中间表示,有不同的方法(参见示例 herehere)。如果您正在努力寻求一个最佳解决方案(即在实际寄存器中尽可能长时间地保留尽可能多的变量,而不会将它们溢出到堆栈上),这个问题可能会很困难,但是有更简单的方法,如“线性扫描寄存器分配”,当时间紧迫时,例如在 just-in-time compilations .

如果您想深入研究代码,也许可以看看 LLVM 基础架构和 their register allocationthis演示文稿。

关于compiler-construction - 编译器如何将数百个变量存储在几个寄存器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30720536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com