托管代码与非托管代码

时间:2016-07-15 20:43:05

标签: computer-science unmanaged managed

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

这是对的吗?

1 个答案:

答案 0 :(得分:7)

来自annakata的回答:

  

托管代码不是编译为机器代码,而是编译为由某些人解释和执行的中间语言   在机器上服务,因此在一个机器内运行(希望!)   处理内存和危险事物的安全框架   线程给你。在现代用法中,这通常意味着.NET但确实如此   没必要。

     

非托管代码被编译为机器代码,因此直接由OS执行。因此它有能力做到   破坏/强大的东西托管代码没有。这就是一切   曾经工作,所以通常它与像.dlls这样的老东西相关联。

现在,引擎盖下发生了什么? 托管vs非托管全部关于内存

在托管代码中,代码本身并不直接操作内存。它为代表代码执行它的运行时提供指令。这样,可以阻止不安全或非法操作,并且代码在半沙箱中运行。托管语言可以并且通常具有非托管代码 - 这就是计算的本质。

像巨型停车场一样可视化记忆。托管和非托管语言之间的区别如下:

在托管语言中,您走到代客处并解释您希望停放10辆汽车。您并不确切地知道 他们在哪里停放,但您知道代客会很乐意随时为您取回它们。您也无法决定他们在哪里停车 - 您只需告诉代客他们需要停车。

使用非托管语言,选择这些地点是你的工作。你可以驾驶其他车辆,停在残障人士的地方,无论什么 - 这可以让你获得更好的表现(你不必经常将指示传递给代客)但是你也可以犯很多愚蠢/危险的错误。