我已经看到了几个关于“托管”代码意味着什么的解释,有些针对托管代码编译成中间语言和JITed以及其他人谈论GC和内存管理的想法。哪个实际上是管理一种语言,还是两者兼而有之?
GC的答案很有意义,因为内存被管理(因此称为“托管代码”),但假设不能使用具有GC但是本机的语言(未编译为IL)。 GC和IL代码是否紧密耦合?
答案 0 :(得分:2)
不,我不会说GC和IL是紧密耦合的。事实上,没有另一个人就可以存在 - 有时就是这种情况。
IL的主要目的是使其与平台无关,并允许JIT进行依赖于平台的非常具体的优化。例如,x86,x64,ARM等.JIT的目的是将IL转换为架构的本机代码,并对其进行正确优化。
您无法针对x86和ARM进行优化,因为平台太不同了。这就是每个特定平台都有JIT的原因。 JIT可以很好地了解它将面对的平台。作为代码作者,您可能不知道。
另一方面,GC是关于内存管理的。有许多垃圾收集器库用于不能编译为中间语言的软件。以this one为例,虽然很小但是完成了工作。关于这个问题也有很多papers。一个人可能没有另一个人存在,这不是我们经常看到的。
那么什么才能成为“托管”语言?对我来说,这意味着有一种涉及某种类型的虚拟机。在.NET的情况下,CLR。它提供各种服务,如GC,Jit,代码访问安全(CAS)等。
答案 1 :(得分:1)
http://en.wikipedia.org/wiki/Managed_code
这很清楚它的代码是管理的(通过在虚拟机下运行),而不是内存。
答案 2 :(得分:1)
托管代码意味着它由虚拟运行时计算机运行,通常意味着内存管理。这就是人们说“托管代码”时的意思。系统资源(例如内存分配)可以为您管理其他一些事情。
JIT与此无关。 JIT是某些虚拟运行时计算机的功能,但不是必需的。 Visual Basic 6使用运行时而不是JIT - 它是逐行解释的。 JIT在调用时编译一个代码单元。但是,.NET语言将使用实现JIT编译的.NET运行库。