浏览了堆栈溢出的几个答案之后,很明显,一些本机编译的语言具有垃圾回收功能。但是我不清楚这将如何工作。
我了解垃圾收集如何与解释语言一起工作。垃圾收集器将仅与解释器一起运行,并从程序的内存中删除未使用和无法访问的对象。他们俩一起跑。
但是,如何使用编译语言呢?我的理解是,一旦编译器将源代码编译为目标代码(特别是本机代码),就完成了。它的工作完成了。那么,编译后的程序又如何被垃圾回收呢?
在执行程序删除“垃圾”对象时,编译器是否以某种方式与CPU一起工作?还是编译器在编译程序的可执行文件中包括一些最小的垃圾回收器。
我相信我的后一种说法将比前一种更具有效性,这是由于从Stack Overflow的答案中摘录的:
一种这样的编程语言是埃菲尔。大多数Eiffel编译器出于可移植性原因而生成C代码。该C代码用于通过标准C编译器生成机器代码。埃菲尔实现为该已编译的代码提供GC(有时甚至是精确的GC),并且不需要VM。特别是,VisualEiffel编译器直接在完全GC支持下生成了本机x86机器代码。
最后一条语句似乎暗示编译器在最终的可执行文件中包含一些程序,该程序在运行时充当垃圾回收器。
在页面d语言的关于垃圾收集的网站这是本地编译并具有可选的垃圾收集器- -似乎也暗示了一些后台程序运行沿着原来的可执行程序来实现垃圾回收。
D是一种支持垃圾回收的系统编程语言。通常,没有必要显式释放内存。只需根据需要进行分配,垃圾收集器就会定期将所有未使用的内存返回到可用内存池。
如果方法上面提到的被使用,究竟会工作的呢?编译器是否存储一些垃圾回收程序的副本并将其粘贴到它生成的每个可执行文件中?
还是我的思维有缺陷?如果是这样,使用什么方法来实现编译语言的垃圾回收,它们将如何工作?
malloc()
。