托管代码与非托管代码

managed code vs unmanaged code

我试图让我的思绪围绕托管代码与非托管代码的概念展开。如果我错了,请纠正我,但托管代码是任何被编译为字节码而非托管代码被编译为机器代码的东西。

这是正确的吗?

来自annakata的回答:

Managed code is not compiled to machine code but to an intermediate language which is interpreted and executed by some service on a machine and is therefore operating within a (hopefully!) secure framework which handles dangerous things like memory and threads for you. In modern usage this frequently means .NET but does not have to.

Unmanaged code is compiled to machine code and therefore executed by the OS directly. It therefore has the ability to do damaging/powerful things Managed code does not. This is how everything used to work, so typically it's associated with old stuff like .dlls

现在,幕后发生了什么? 托管与非托管 都是关于内存的

在托管代码中,代码本身并不直接操作内存。它向代表代码执行此操作的运行时提供指令。这样,可以阻止不安全或非法操作,并且代码在 semi-sandbox 中运行。托管语言可以而且经常有非托管代码——这就是计算的本质。

将内存想象成一个巨大的停车场。托管语言和非托管语言的区别是这样的:

在管理语言中,您走到 valet 并解释您想要停放 10 辆车。您不确切地知道 它们停在哪里,但您知道 valet 会很乐意在您需要的任何时候为您取回它们。您也不必 决定 他们停在哪里 - 您只需告诉 valet 他们需要停放。

在非托管语言中,选择位置是您的工作。你可以开车撞上其他车,停在残疾人停车位,随便什么-这会给你更好的表现(你不必不断地向 valet 传递指令)但是你也会犯很多stupid/dangerous错误。