gpt4 book ai didi

compiler-construction - 无法理解有关编译器优化的声明

转载 作者:行者123 更新时间:2023-12-04 22:38:32 25 4
gpt4 key购买 nike

我对 VM 在运行时和编译时的优化感兴趣。我认为优化在编译时是最有效和最简单的。

然而,我的想法在某些情况下似乎是错误的。这在 Steve Yeggie's statement quoted by Daniel 中很明显

[O]ptimization is often easier when performed at runtime by a clever virtual machine - -.



为什么在运行时由 VM 执行的优化比在编译时更容易?

最佳答案

简答:因为在运行时更容易识别和分析热点 - 程序中使用时间最多的部分。

长答案:

如果您开始以解释模式运行代码,虚拟机可以计算代码不同部分的使用频率和使用时间。这些部分可以更好地优化。

采用嵌套的 if-then-else-clause。较少的 bool 检查需要较少的运行时间。如果您优化零件的路径,即更频繁地执行,您可以获得更好的整体运行时间。

另一点是,在运行时您可以做出假设,而这在编译时是不可能的。例如,Java-VM 内联在服务器模式虚拟方法中——只要只加载一个实现这些方法的类。如果在编译时完成,那将是不安全的。如果加载了另一个类,JVM 会再次对代码进行去优化,但这通常不会发生。

此外,在运行时更了解程序运行所在的机器。如果你有一台有更多寄存器的机器,你可以使用它们。同样,如果在编译时完成,那是不安全的。

有一件事要说:在运行时优化也有缺点。最重要的是:优化的时间被添加到程序的运行时中。它也更复杂,因为您必须编译程序的一部分并执行它们。虚拟机中的错误很关键。想想一个编译器,它有时会崩溃——你可以再次编译,一切都很好。如果 VM 有时崩溃,则意味着您的程序有时会崩溃。不好。

作为结论:您可以在运行时进行所有优化,这在编译时是可能的......等等。你有关于程序的更多信息,它的执行路径和程序正在运行的机器。但是您必须考虑运行优化所需的时间。此外,在运行时执行更复杂,并且错误比在编译时更相关。

关于compiler-construction - 无法理解有关编译器优化的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1048400/

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