2017-08-15 80 views
0

有没有使用垃圾收集的程序设计语言,但是也允许手动内存管理?例如,提供析构函数。编程语言甚至有可能同时进行垃圾收集和手动内存管理?一种带垃圾收集和手动内存管理的编程语言

相关SO这里的问题,但没有答案: Interpreted languages with manual memory management?

感谢

+1

是的。 C和C++。 [勃姆-GC(http://www.hboehm.info/gc/)。 –

+0

谢谢艾略特。使用'GC_MALLOC()'创建的对象可以使用'delete'销毁吗? – mils

+0

Ada ............. – user3344003

回答

1

这是绝对有可能的,但它需要的语言支持对象的分配(假设它是一个面向对象的语言,这肯定让生活更容易)来自两个(或更多)内存区域。

一个支持这个平台的例子是Java的实时规范(RTSJ)。由于实时操作很容易受到非确定性GC的干扰,因此RTSJ会在应用程序代码可以使用的标准Java堆之外添加内存​​区域。 RTSJ使用内存区域的概念,其中有三个:HeapMemory,ScopedMemory和ImmortalMemory。 ScopedMemory允许特定线程使用内存区域。当线程终止时,内存区域被自动释放。这依赖于开发人员注意不要在线程之外共享对该区域的引用。 ImmortalMemory是永远不会被垃圾回收的内存区域。一旦在这个区域分配了对象,就不可能回收空间(没有free()调用)。

我不同意C和C++是符合您描述的语言的评论。既不在托管环境中运行,也不具有任何形式的并发GC。