【问题标题】:Run CLR JIT's output on bare hardware without OS running在不运行操作系统的裸硬件上运行 CLR JIT 的输出
【发布时间】:2015-06-21 02:44:07
【问题描述】:

是否可以在没有操作系统的裸硬件上运行 CLR 的 JIT 或 AOT(Ahead-Of-Time)编译器的输出(因为它被称为本机代码或本机指令集)? .NET 框架库代码在什么时候被链接?

我的意思是没有操作系统是没有 Win32 API 调用的帮助。

【问题讨论】:

    标签: .net clr jit cil


    【解决方案1】:

    如果您删除 Win32,那么您需要将它为 CLR 所做的事情(如内存分配、控制台、文件系统和网络访问)替换为其他内容,否则它们将不起作用。

    在这方面,.Net 和 C 之间的唯一区别可能是您可以编写一个有用的 C 程序,而无需任何这些。另一方面,CLR 只是假设存在内存分配和文件系统访问等功能,即使是最简单的 C# 程序也使用它们。

    所以,不,我不相信你可以在没有基本操作系统的情况下运行普通的 CLR 程序。

    另一方面,如果您没有绑定到普通 CLR,那么使用 AOT 编译器运行 IL 所需的支持非 CLR 代码并不多,如 Singularity 所示。


    关于术语,术语“本机代码”是指使用 CPU 指令集直接在 CPU 上运行的代码。这并不意味着它的代码不包含任何操作系统调用。

    【讨论】:

    • 那么 .NET 框架 IL 与源 IL 链接,而 JITer 或 AOT 编译源 IL 并生成本机代码?对吗?
    • @Nicky 差不多。尽管在 JIT 的情况下,调用某个方法的本机代码一开始并不包含该方法的地址。相反,它包含 JIT 编译该方法然后执行它的代码地址。
    猜你喜欢
    • 1970-01-01
    • 2020-12-29
    • 2012-05-21
    • 1970-01-01
    • 2017-03-06
    • 2017-04-28
    • 2019-03-01
    • 2019-11-06
    • 1970-01-01
    相关资源
    最近更新 更多