管理语言的是那些处理内存清理你。

编辑 我不是在说垃圾收集。我只是有兴趣知道有关语言会 free() 存储器对我来说,仍然编制下的机器码。

有帮助吗?

解决方案

你似乎很困惑“管理”和“垃圾收集”,而通常管理的语言(例如C#和Java)具有自动垃圾收集,“管理”和“管理”。实际上是指存在“虚拟机”的事实。它执行您的代码(请参阅 http://en.wikipedia.org/wiki/Managed_code

例如,CLR(公共语言运行时)是执行.Net代码的虚拟机,而JVM(Java虚拟机)是执行java代码的虚拟机。

实际上,您可以为非托管语言设置垃圾收集(例如 C ++ ),反之亦然有管理语言没有垃圾收集(编辑:我正在寻找一些但我似乎找不到任何除非目标C 很重要,我不确定在没有垃圾收集的情况下创建托管语言会有很大的意义。

Java和C#实际上都可以直接编译成机器代码,所以它们直接执行而不是使用虚拟机 - 对于.Net代码,这是使用NGEN完成的(实际上CLR将.Net程序集编译到机器中)代码执行时,所谓的“及时”编译)

编辑:作为对您的问题更新的更新,事实上在完全手动内存管理和垃圾收集的极端之间的频谱中有许多垃圾收集的替代方案,以及很多编译成机器代码的语言都包含不同形式的内存管理,不需要你明确释放内存。

我可以问 - 这是“出于兴趣”吗?问题,或者您是否正在尝试为项目选择一种语言 - 如果是后者那么为什么您对将语言编译为机器代码如此感兴趣?当然在.Net的情况下,你的代码编译JIT提供了许多性能优势(在大多数情况下),同样NGENing你的代码不会消除对.Net框架的依赖。

其他提示

批次:

LISP(和变体),Erlang,C#(Mono下),Haskell,Java(带gcj)

当然有。例如,Java。 (GCJ)

然而,管理本身意味着你必须携带一些运行时。

一些更多,在更广泛意义上的"管理"的意义的安全(通过运行时的类型检查或详尽的静态分析)和/或垃圾收集:

  • OCaml
  • D
  • Ada
  • 序言
  • 干净的
  • 艾菲尔铁

类似于Efraims的回答,任何.NET程序也会编译为机器代码,通常分两步(JIT),但有一个NGEN工具可以将MSIL预编译为本机。

有一个半GC选择:GLIB。

Gilb使用引用计数来管理对象的生命周期。当参考计数满足0时,将清理一个对象。

它比.NET或Java或Python更加不方便,但是当你必须使用C时,它总比没有好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top