con*_*rio 6 computer-science unmanaged managed
我试图让我的想法围绕托管与非托管代码的概念.如果我错了,请纠正我,但托管代码是任何被编译为字节码的东西,而非托管代码被编译成机器代码.
它是否正确?
从annakata的回答:
托管代码不是编译为机器代码,而是编译为中间语言,由机器上的某些服务解释和执行,因此在一个(希望是!)安全框架内运行,该框架为您处理内存和线程等危险事物.在现代用法中,这通常意味着.NET,但并非如此.
非托管代码被编译为机器代码,因此直接由OS执行.因此,它有能力做破坏/强大的事情托管代码没有.这就是所有东西用来工作的方式,所以通常它与像.dll这样的旧东西相关联
现在,引擎盖下发生了什么?托管与非托管是关于内存的.
在托管代码中,代码本身不直接操作内存.它为代表代码执行它的运行时提供指令.这样,可以阻止不安全或非法操作,并且代码在半沙箱中运行.托管语言可以并且通常具有非托管代码 - 这就是计算的本质.
像巨型停车场一样可视化记忆.托管和非托管语言之间的区别如下:
在托管语言中,您走到代客处并解释您希望停放10辆汽车.你不确切地知道他们停在哪里,但是你知道代客们很乐意随时为你取回它们.你也无法决定他们停在哪里 - 你只需告诉代客他们需要停车.
在一种非托管语言中,选择这些位置是你的工作.你可以驾驶其他车辆,停在残疾人的地方,无论如何 - 这会让你获得更好的表现(你不必经常向服务员传递指令),但你也可以犯很多愚蠢/危险的错误.