2010-03-08 2 views
3

다른 언어의 함수 (예 : Fortran 95)를 GC가있는 언어에서 반복적으로 호출한다고 상상해보십시오. Fortran 함수는 호출자 언어에서 참조되지 않은 쓰레기로 볼 수있는 호출 사이에 메모리에 할당 된 것을 남겨 둡니다.가비지 수집기가 다른 언어로 작성된 함수에 의해 "가비지"에 도달 할 수 있습니까?

호출자 언어의 GC가 Fortran에 할당 된 메모리에 액세스 할 수 있으며 쓰레기로 간주하고 무료로 사용할 수 있습니까?

나는 이 될 것 같지 않다.. 포트란 함수에 의해 할당 된 메모리는 GC가 관리하는 메모리와 분리 된 자체 메모리 관리를 가져야하지만, 누구나 확인할 수 있다면 행복 할 것이다.

왜 필요합니까? 전술 한 바와 같이

(누군가가 관심이있는 경우), I는 자체 메모리를 할당 F95에서 함수를 작성해야 여러 번이라고하며 통화 사이의 할당 된 메모리에 대한 참조를 유지해야합니다. 문제는 Fortran 포인터가 외부 세계와 호환되지 않기 때문에 Fortran에서 'void *'로 전달할 수 없다는 것입니다. 따라서 Fortran 함수는 포인터를 포인터로 저장하지 않고 외부 세계의 정수 배열로 캐스팅합니다 (예 :). 그러나 GC가 언제든지 Fortran에서 메모리를 방해 할 수 있으면 참조가 정수 배열에 저장되어 있고 Fortran에서 할당 된 메모리를 해제하려는 것이 좋지 않을 수 있습니다.

+0

관리되지 않는 언어를 사용하면 더 좋거나 나쁘게 생각하면 메모리 (할당) 할당과 관련하여 스스로 결정할 수 있습니다. –

+0

문제는 기능의 사용자가 어떤 언어를 사용할 지 모르겠다는 것입니다. 그러므로 나는 거의 모든 것을 위해 작동하는 해결책을 제시해야합니다. – Jan

답변

4

언어가 명시 적으로 호스트 언어 (가비지 수집기 사용)와 통합되어 있지 않은 한 아니요. .NET에서 ... C++ 응용 프로그램은 C++/CLI를 사용하여 .NET 객체를 할당하고 반환 할 수 있으며 자연스럽게 가비지 수집됩니다. 나는 많은 프로젝트에서 그렇게한다.

순수 C++ 객체 ... 쓰레기 수거통은 처리 방법을 전혀 모르고 있습니다.

0

아마도이 질문에 대한 답이 정확하지 않을 수 있습니다. 그러나 규칙적으로 가비지 수집기는 일종의 힙 할당 자와 연결되며 제어하는 ​​힙 내의 메모리 만 수집 할 수 있습니다. Fortran 함수가 메모리를 완전히 따로 따로 할당 할 것이므로 아마도 가비지 수집기의 영향을받지 않을 것입니다.

당신이 말하는 가비지 컬렉터가 무엇인지 정확히 알지 못해도 확실하게 말할 수는 없습니다.

관련 문제