b / w托管/非托管和本机代码有什么区别?

时间:2009-05-19 06:41:32

标签: .net c++-cli

是非托管代码是本机代码吗?有什么区别任何人帮助我。


重复: Difference between native and managed code?

3 个答案:

答案 0 :(得分:5)

托管代码是在虚拟机下运行的代码,换句话说,其内存由另一个程序(例如C#)“管理”。

非托管代码在底层架构上运行,无需虚拟机,但可能需要运行时库。 (例如C)

进一步阅读:http://en.wikipedia.org/wiki/Managed_code

哎呀,继承人Duplicate

答案 1 :(得分:0)

托管代码由.NET运行时运行。因此,CLR处理内存管理(也称为垃圾收集)。托管二进制文件是IL代码。 CPU无法直接理解此代码,但CLR会解释该代码。任何具有CLR的环境都可以运行托管程序集。

非托管代码只是经常编译的代码。 CPU直接理解的一系列ASM指令。运行速度更快,但支持框架较少,并且在出生时仅限于可能运行的特定CPU集。

答案 2 :(得分:0)

有一天我听到了一个相当不错的故事。如果原来的人过来看到这个,那么我会相信他。我不确定他是否会要我放弃他的名字。

非托管代码: 想象一下,一些真正被撕裂的平均战士。他们完全免费统治。他们可以随心所欲地去任何他们需要的地方。唯一的问题是他们在每个地方大便。他们把整个地方放大,然后把便便放到他们不应该去的地方。这是C / C ++等。

托管代码: 这些家伙是远房亲戚。更精致。但不太合适和卑鄙。事实上,它们比重量轻微。他们不允许在任何他们想要的地方跑。事实上,有一个边界将它们保存在他们的小玩具笔中。他们也大便,但他们是尿布,所以他们不会到处乱扔东西。通常情况下,一个小家伙来到这里,清理掉他们的尿布。这是Java。

大便显然是记忆。边界是VM。小家伙是垃圾收集者。

我不记得可移植性功能是如何影响这个故事的。