gpt4 book ai didi

c# - 编译器如何知道 .NET 框架中正在运行的代码是托管代码还是非托管代码

转载 作者:行者123 更新时间:2023-11-30 15:52:10 26 4
gpt4 key购买 nike

当阅读 .NET 的基础知识时,例如 Managed and Unmanaged code,在 CLR 下运行并在 .NET 框架中开发的代码是托管的 code> 而 unmanaged 不在 CLR 下运行并且在 .NET 框架之外开发此外,思考和了解代码的实用性它们如何运行以及编译器如何知道类型代码有点有点困惑。所以,为了摆脱这种困惑,想在这里问这个问题。

请让我知道这件事。

提前致谢!! :)

最佳答案

如果您谈论的是 C#、VB(.NET) 等语言的编译器,那么:从编译器的角度来看,它们始终是受管理的。他们输出的所有内容都是托管代码,即 IL。在某些地方,C# 等接近直接非托管 - 例如:

  • 当使用不安全 代码和“非托管指针”时,C# 可以直接与非托管内存对话 - 但它总是表达如何通过 IL 来做到这一点(IL 包含用于处理原始指针)
  • P/Invoke 层可以表达与外部非托管代码对话的边界

然而,在这两种情况下,都是运行时的 JIT 编译器(如果使用非 JIT 目标平台,则为 AOT 编译器)解释这些 在 IL 中表达的非托管意图,并输出 CPU 内在函数实现它们。但是...这正是 JIT/AOT 为所有 IL 所做的,所以...没有什么不同。

因此:从 C#/VB(.NET) 等语言的编译器的角度来看,这里没有实际问题:它始终在输出方面 100% 受管理- 由于编译器是(自 Roslyn 起)也是 .NET 代码,因此它们在实际执行方面也是 100% 管理的。

如果您的意思不同,则有必要澄清问题,非常、非常具体您想到的场景,最好是举例说明。

关于c# - 编译器如何知道 .NET 框架中正在运行的代码是托管代码还是非托管代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55097541/

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