本机和托管代码之间的区别?

时间:2009-05-13 02:14:13

标签: native managed

例如,在查看GlowCode分析器网站时,它说:

“GlowCode 6.2和x64配置文件本机,托管和混合C ++,C#,.NET代码”

他们是什么意思?

4 个答案:

答案 0 :(得分:73)

本机代码是其内存不是“托管”的代码,因为内存不会为您释放(例如,C ++'删除和C是免费的),没有引用计数,没有垃圾回收。您猜对了,托管代码是代码,其内存是免费的,并为您分配,垃圾收集和其他好东西。

混合代码是指具有调用非托管图层的托管代码。通常,当你有一个纯粹的非托管C ++ DLL并且你使用P / invoke从.NET调用它时。

答案 1 :(得分:42)

编译本机代码以直接与OS一起工作。但是,托管代码是预编译的(Java语言中的字节码),然后由Just In Time Compiler在运行时处理为本机代码。托管代码具有在不同操作系统上运行的潜在有趣的副作用,因为在VM实际使用它之前不会创建机器代码。这样,您就可以在Windows上运行.NET应用程序,并在安装了Mono运行时的Linux或Mac上运行它们。可移植性目前并不像Java那样干净(因为微软自然封闭的架构),但这个概念仍然存在。

如果您正在运行非托管应用程序,则代码已编译为针对指定的OS /硬件运行。对另一个OS /指令集的任何可移植性都将丢失,必须重新编译才能执行。

答案 2 :(得分:28)

本机代码以其运行的计算机的“本机”机器语言编写,并由处理器直接执行。

托管代码是用一种特殊语言编写的,需要另一个程序来运行(即管理)它。这个其他程序通常被称为解释器,因为它解释了特殊语言。

C和C ++程序是原生的。

管理Java和C#(以及所有.NET语言)。

托管C ++是一种在.NET解释器中运行的特殊形式的C ++。

混合程序是一个使用本机和托管代码的程序。

答案 3 :(得分:5)

在公共语言运行库(CLR)的控制下运行的代码称为托管代码。不在CLR下运行的代码称为本机代码。