想象一下,您使用GC从一种语言中反复调用另一种语言的函数(例如,Fortran 95)。 Fortran函数会在调用程序之间留下一些内容,这些调用可能会从调用者语言中看到为未引用的垃圾。垃圾收集器是否可以通过用其他语言编写的函数留下“垃圾”?
来自调用者语言的GC是否可以访问Fortran中分配的内存,并将其视为垃圾并释放它?
我想它不会发生。由Fortran函数分配的内存应该有自己的内存管理,与GC管理的内存分开,但是,如果有人能够确认,我会很高兴。
为什么我需要它? (如果有人感兴趣)
如上所述,我需要在F95中编写一个函数,它分配自己的内存,被多次调用,并且需要在调用之间保持对分配内存的引用。问题在于Fortran指针与外部世界不兼容,所以我不能仅仅通过Fortran中的'void *'来传递一些东西。因此,Fortran函数不会将指针存储为指针,而是会将其作为外部世界的整数数组进行转换(例如)。但是,如果GC无论如何都会干扰Fortran的内存,则可能不知道该引用保留在整数数组中,并且可能希望释放Fortran中分配的内存,这很糟糕。
使用非托管语言,无论更好还是更糟,关于内存(de)分配您都是您自己的。 – 2010-03-08 15:17:27
问题是我不知道函数的用户将使用什么语言。因此我需要想出一个几乎适用于任何事情的解决方案。 – Jan 2010-03-08 15:23:10