我试图让我的思想围绕托管代码与非托管代码的概念。 如果我错了,请纠正我,但托管代码是编译为字节码的任何内容,而非托管代码编译为机器代码。
这是对的吗?
从安娜卡塔的回答:
托管代码不是编译为机器代码,而是编译为由某些人解释和执行的中间语言 在机器上提供服务,因此在 (希望! 处理危险事物的安全框架,如内存和 线程为您。在现代用法中,这通常意味着 .NET,但确实如此 不必。
非托管代码编译为机器代码,因此由操作系统直接执行。因此,它有能力做到 破坏性/强大的东西 托管代码不会。一切就是这样 曾经工作过,所以通常它与 .dll 等旧东西相关联
现在,引擎盖下发生了什么?托管与非托管都是关于内存的。
在托管代码中,代码本身不直接操作内存。它向代表代码执行此操作的运行时提供指令。这样,可以阻止不安全或非法的操作,并且代码在半沙箱中运行。托管语言可以而且通常确实具有非托管代码 - 这就是计算的本质。
像一个巨大的停车场一样可视化记忆。托管语言和非托管语言之间的区别如下所示:
在托管语言中,您走到代客泊车旁并解释说您希望停放 10 辆车。您不知道它们停在哪里,但您知道代客泊车员会很乐意随时为您取回它们。你也不能决定他们停在哪里 - 你只需要告诉代客他们需要停放。
在非托管语言中,你的工作是挑选点。你可以开车到其他汽车,停在残疾人的地方,随便什么 - 这给了你更好的表现(你不必不断地向代客传达指令),但你也可能犯很多愚蠢/危险的错误。