sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-04 22:38:32 27 4
mua khóa gpt4 Nike

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

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

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



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

1 Câu trả lời

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

长答案:

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

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

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

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

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

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

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

27 4 0
Bài viết được đề xuất: unix - 众所周知的 UID 是什么?
Bài viết được đề xuất: php - 在不使用 eval() 的情况下找到字符串方程的答案
Bài viết được đề xuất: django - Django 中的动态用户菜单
Bài viết được đề xuất: macos - 调用macports svn而不是预装mac的svn
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com