Представьте, что вы вызываете из языка с помощью GC функцию из другого языка (например, Fortran 95). Функция Fortran оставляет что-то распределенное в памяти между вызовами, что на языке вызывающего абонента может рассматриваться как несвязанный мусор.
Может ли GC из языка вызывающей стороны получить доступ к памяти, выделенной в Fortran, и считать ее мусором и освободить ее?
Я думаю, что этого не произойдет . Память, выделенная функцией Fortran, должна иметь собственное управление памятью, отделенное от памяти, управляемой GC, однако я был бы рад, если бы кто-нибудь смог это подтвердить.
Зачем мне это нужно? (если кому-то интересно)
Как описано выше, мне нужно написать функцию в F95, которая выделяет свою собственную память, вызывается несколько раз, и она должна сохранять ссылку на выделенную память между вызовами. Проблема в том, что указатели на Фортране несовместимы с внешним миром, поэтому я не могу просто передать что-то как 'пустое *' из Фортрана. Поэтому функция Fortran будет хранить указатель не как указатель, а будет приводить его (например) как целочисленный массив для внешнего мира. Однако, если GC каким-либо образом может помешать памяти из Fortran, он может не понимать, что ссылка хранится в целочисленном массиве, и может захотеть освободить память, выделенную в Fortran, что было бы плохо.