想象一下,您从一种具有 GC 的语言中重复调用另一种语言(例如 Fortran 95)的函数。 Fortran 函数在调用之间的内存中留下了一些分配的东西,从调用者语言来看,这些东西可能被视为未引用的垃圾。
调用方语言的 GC 是否可以访问 Fortran 中分配的内存并将其视为垃圾并释放它?
我想它不会发生。 Fortran 函数分配的内存应该有自己的内存管理,与 GC 管理的内存分开,但是,如果有人能证实这一点,我会很高兴。
我为什么需要它? (如果有人感兴趣的话)
如上所述,我需要在 F95 中编写一个函数,它分配自己的内存,被调用多次,并且需要在调用之间保持对分配内存的引用。问题是 Fortran 指针与外部世界不兼容,所以我不能只从 Fortran 传递一些东西作为“void *”。因此,Fortran 函数不会将指针存储为指针,而是会将其转换为(例如)外部世界的整数数组。但是,如果 GC 以任何方式干扰来自 Fortran 的内存,它可能不理解引用保存在整数数组中,并且可能想要释放在 Fortran 中分配的内存,这会很糟糕。
最佳答案
不,除非语言明确地与宿主语言集成(使用垃圾收集器)。在 .NET 中... C++ 应用程序可以使用 C++/CLI 来分配 .NET 对象并返回它们——这些对象自然会被垃圾收集。我在许多项目中都这样做。
但是一个纯 C++ 对象……垃圾收集器对此一无所知,也不知道如何处理。
关于garbage-collection - 垃圾收集器能否到达用另一种语言编写的函数留下的 "garbage"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2402239/