想象一下,您使用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