garbage-collection - 垃圾收集器能否到达用另一种语言编写的函数留下的 "garbage"?

标签 garbage-collection

想象一下,您从一种具有 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/

相关文章:

java - 垃圾回收 : Will the object be collected

Java GC 安全点

ruby-on-rails - unicorn 中每个 worker 的最大请求数

java - ParallelOldGC 垃圾收集器中旧空间的阈值

java - 非常慢的 Java full GC 挂钟

java - Flux 是如何垃圾收集的?

java - 如何分析 Java 中的对象创建?

javascript - 为什么在这种情况下 v8 会耗尽内存?

java - Elasticsearch 搜索 thread_pool 的拒绝

java - 为什么在 Java 中 GC 时 MySQL 的PreparedStatements 不会自动关闭?